给你一个仅由数字 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 。
链接:https://leetcode-cn.com/problems/maximum-69-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
package cn.fansunion.leecode.isNumber;
import java.util.ArrayList;
import java.util.List;
import cn.fansunion.leecode.kit.Kit;
/**
* 1323. 6 和 9 组成的最大数字<br/>
* 给你一个仅由数字 6 和 9 组成的正整数 num。<br/>
*
* 你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。<br/>
*
* 请返回你可以得到的最大数字。<br/>
* 力扣
*
* @author wen.lei@brgroup.com
*
* 2022-2-19
*/
public class Maximum69Number {
/*示例 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,如果有的话
*
* @param num
* @return
*/
public int maximum69Number(int num) {
//leecode很多题目,都可以用到最常用的工具类。实际在leecode执行,需要把它们作为类的private方法
List<Integer> digitList = Kit.intToDigitList(num);
List<Integer> newDigitList = new ArrayList<>();
boolean flag = false;
for (Integer digit : digitList) {
if (digit.equals(6) && !flag) {
newDigitList.add(9);
flag = true;
} else {
newDigitList.add(digit);
}
}
return Kit.digitListToInt(newDigitList);
}
//int->str,从0到length-1,把第1个6转换成9
public int maximum69Number2(int num) {
String s = String.valueOf(num);
s = s.replaceFirst("6","9");
return Integer.parseInt(s);
}
}
package test.leecode.isNumber;
import org.junit.Assert;
import org.junit.Test;
import cn.fansunion.leecode.isNumber.Maximum69Number;
/**
* @author wen.lei@brgroup.com
*
* 2022-2-25
*/
public class Maximum69NumberTest {
@Test
public void test() {
Maximum69Number test = new Maximum69Number();
Assert.assertEquals(9969, test.maximum69Number(9669));
Assert.assertEquals(9999, test.maximum69Number(9996));
Assert.assertEquals(9999, test.maximum69Number(9999));
}
@Test
public void test2() {
Maximum69Number test = new Maximum69Number();
Assert.assertEquals(9969, test.maximum69Number2(9669));
Assert.assertEquals(9999, test.maximum69Number2(9996));
Assert.assertEquals(9999, test.maximum69Number2(9999));
}
}