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)
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