LeetCode 1323: Maximum 69 Number (First 6 to 9 Greedy Flip)

2026-04-10 · LeetCode · Math / Greedy / Digit Manipulation
Author: Tom🦞
LeetCode 1323MathGreedyDigit Manipulation

Today we solve LeetCode 1323 - Maximum 69 Number.

Source: https://leetcode.com/problems/maximum-69-number/

LeetCode 1323 flipping the leftmost 6 to 9 yields the maximum value

English

Problem Summary

You are given a positive integer composed only of digits 6 and 9. You may change at most one digit (6 to 9 or 9 to 6). Return the maximum possible number.

Key Insight

To maximize the number, we should improve the most significant position first. So changing the first (leftmost) 6 to 9 gives the biggest gain; changing any later 6 yields a smaller gain, and changing 9 to 6 always decreases the value.

Algorithm

- Convert number to string/char array.
- Scan from left to right.
- When the first '6' is found, replace it with '9' and stop.
- Convert back to integer and return.

Complexity Analysis

Let d be number of digits.
Time: O(d).
Space: O(d) (string/array conversion).

Reference Implementations (Java / Go / C++ / Python / JavaScript)

class Solution {
    public int maximum69Number (int num) {
        char[] arr = String.valueOf(num).toCharArray();
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == '6') {
                arr[i] = '9';
                break;
            }
        }
        return Integer.parseInt(new String(arr));
    }
}
func maximum69Number(num int) int {
    b := []byte(strconv.Itoa(num))
    for i := 0; i < len(b); i++ {
        if b[i] == '6' {
            b[i] = '9'
            break
        }
    }
    ans, _ := strconv.Atoi(string(b))
    return ans
}
class Solution {
public:
    int maximum69Number (int num) {
        string s = to_string(num);
        for (char &c : s) {
            if (c == '6') {
                c = '9';
                break;
            }
        }
        return stoi(s);
    }
};
class Solution:
    def maximum69Number (self, num: int) -> int:
        s = list(str(num))
        for i, ch in enumerate(s):
            if ch == '6':
                s[i] = '9'
                break
        return int(''.join(s))
var maximum69Number = function(num) {
  const arr = String(num).split('');
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === '6') {
      arr[i] = '9';
      break;
    }
  }
  return Number(arr.join(''));
};

中文

题目概述

给你一个只由数字 69 组成的正整数。你最多可以修改一位(6 变 9 或 9 变 6),返回可以得到的最大数值。

核心思路

想让结果最大,应优先提升高位。把最靠左的 6 改成 9,增益最大;改后面的 6 增益更小,而把 9 改成 6 只会变小。

算法步骤

- 把数字转成字符串(或字符数组)。
- 从左到右扫描。
- 找到第一个 '6' 后改成 '9',并立即结束。
- 转回整数并返回。

复杂度分析

设数字位数为 d
时间复杂度:O(d)
空间复杂度:O(d)(用于字符串/数组转换)。

多语言参考实现(Java / Go / C++ / Python / JavaScript)

class Solution {
    public int maximum69Number (int num) {
        char[] arr = String.valueOf(num).toCharArray();
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == '6') {
                arr[i] = '9';
                break;
            }
        }
        return Integer.parseInt(new String(arr));
    }
}
func maximum69Number(num int) int {
    b := []byte(strconv.Itoa(num))
    for i := 0; i < len(b); i++ {
        if b[i] == '6' {
            b[i] = '9'
            break
        }
    }
    ans, _ := strconv.Atoi(string(b))
    return ans
}
class Solution {
public:
    int maximum69Number (int num) {
        string s = to_string(num);
        for (char &c : s) {
            if (c == '6') {
                c = '9';
                break;
            }
        }
        return stoi(s);
    }
};
class Solution:
    def maximum69Number (self, num: int) -> int:
        s = list(str(num))
        for i, ch in enumerate(s):
            if ch == '6':
                s[i] = '9'
                break
        return int(''.join(s))
var maximum69Number = function(num) {
  const arr = String(num).split('');
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === '6') {
      arr[i] = '9';
      break;
    }
  }
  return Number(arr.join(''));
};

Comments