Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
给你一个仅由数字 6 和 9 组成的正整数 num。
你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。
请返回你可以得到的最大数字。
示例 1:
输入:num = 9669
输出:9969
解释:
改变第一位数字可以得到 6669 。
改变第二位数字可以得到 9969 。
改变第三位数字可以得到 9699 。
改变第四位数字可以得到 9666 。
其中最大的数字是 9969 。
示例 2:
输入:num = 9996
输出:9999
解释:将最后一位从 6 变到 9,其结果 9999 是最大的数。
示例 3:
输入:num = 9999
输出:9999
解释:无需改变就已经是最大的数字了。
提示:
- 1 <= num <= 10^4
- num 每一位上的数字都是 6 或者 9 。
二、思路分析:
从低位到高位取出每一位的数字 然后从高位到低位依次还原,遇到第一个6把它变成9,flag控制6变9的数量,默认只变一次 ps:如果有从高到低取每一位的方法会更简单,但目前没有思路。 转字符串需要用到额外的库,或者手动实现,但消耗会更大。
三、AC 代码:
int maximum69Number (int num){
int num_list[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int i = 0;
for (; i < 11; i++){
num_list[i] = num % 10;
num /= 10;
}
int flag = 1, new_num = 0;
for (i = 10; i >= 0; i--){
if (flag && num_list[i] == 6){
num_list[i] = 9;
flag--;
}
new_num = 10 * new_num + num_list[i];
}
return new_num;
}