1001.不重复数
Time Limit: 1000 MS Memory Limit: 32768 KB
描述
给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。
输入
输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
接下来的t行,每行输入一个数。
输出
输出有t行,每行依次对应一组测试数据的运算结果。
示例输入
3
11000000
222222222
333333333
示例输出
12010101
230101010
340101010
解题思路
通过 byte[] 比对每一位上区别判断是否为重复数,
使用递归来查找每一位
Ac源码(Java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import java.util.Scanner; public class Main { static byte[] byteArr; static int realInputInt; static int returnSameIndex; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int times = sc.nextInt(); int[] nums = new int[times]; for ( int i = 0; i < times; i ++ ){ nums[i] = sc.nextInt(); } sc.close(); for ( int i = 0; i < times; i ++ ){ System.out.println(noSame(nums[i] + 1)); } } private static int noSame(int inputInt){ byteArr = Integer.toString(inputInt).getBytes(); sameIndex(byteArr); if (returnSameIndex > 0){ realInputInt = byteArr.length - returnSameIndex - 1; inputInt /= Math.pow(10,realInputInt); inputInt += 1; while(realInputInt > 0){ inputInt *= 10; realInputInt -= 1; if(realInputInt > 0){ inputInt *= 10; inputInt += 1; realInputInt -= 1; } } return noSame(inputInt); } return inputInt; } private static void sameIndex(byte[] inByteArr){ returnSameIndex = 0; for(int i = 1; i < inByteArr.length; i++){ if (inByteArr[i] == inByteArr[i-1]){ returnSameIndex = i; return; } } } } |
nice