LeetCode 1323: Maximum 69 Number (First 6 to 9 Greedy Flip)
LeetCode 1323MathGreedyDigit ManipulationToday we solve LeetCode 1323 - Maximum 69 Number.
Source: https://leetcode.com/problems/maximum-69-number/
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(''));
};中文
题目概述
给你一个只由数字 6 和 9 组成的正整数。你最多可以修改一位(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