数字

1.给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数。

 1 package number;
 2 
 3 /**
 4  * 给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数。
 5  * @author hasee
 6  *
 7  */
 8 public class repeatBit {
 9     public static void main(String[] args) {
10         int NumGived = 9900;
11         System.out.println("the number1 is "+getNumNonrepetition(NumGived));
12         System.out.println("the number2 is "+getNumNonrepetition2(NumGived));
13     }
14     /*
15         给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数的含义是相邻两位不相同,例如1101是不重复数”
16      ++上去判断的简单方法
17      */
18     public static int getNumNonrepetition(int NumGived)
19     {
20         int flag = 0;//为0表示该数不是“不重复数”
21         int numRepeat = NumGived;
22         int numTemp = 0;//
23         int currentBit = 0, lastBit = 0;//前后数位索引
24         while(true)
25         {
26             numRepeat++;
27             //初始化后索引
28             numTemp = numRepeat;
29             lastBit = numTemp % 10;
30             numTemp /= 10;
31             flag = 1;
32             //判断该数是不是“非重复数”
33             while(numTemp != 0)
34             {
35                 currentBit = numTemp % 10;
36                 numTemp /= 10;
37                 if(lastBit == currentBit)
38                 {
39                     flag = 0;
40                     break;
41                 }
42                 lastBit = currentBit;
43             }
44             if(flag == 1)//该数为不重复数,返回
45             {
46                 return numRepeat;
47             }
48         }
49     }
50     public static int getNumNonrepetition2(int NumGived)
51     {
52         //转换为char数组来操作
53         char[] arr = String.valueOf(NumGived).toCharArray();
54         //代表有进位后越位(就是0,1位是9,所以进位超过数组长度)的情况
55         int offside = 0;
56         //从前遍历所有位,当有相同时处理,后面的直接不用管,转换为010101~~~
57         for (int i = 1; i < arr.length; i++) {
58             if (arr[i] == arr[i-1]) {
59                 if(arr[i] != '9'){ //简单加1,然后后面直接0101
60                     arr[i]++;
61                     zeroAndOne(arr, i+1);
62                 }else{ //相同为99时,有进位,相同的两位前一位++
63                     if (i!=1) {
64                         arr[i-2]++;
65                         zeroAndOne(arr, i-1);
66                     }else{ //有越位情况
67                         offside=1;
68                         zeroAndOne(arr, 0);
69                     }
70                 }
71                 break;
72             }
73         }
74         if(offside==0){
75             return Integer.parseInt(new String(arr));
76         }else //越位
77             return Integer.parseInt("1"+new String(arr));
78     }
79     //变成0101010101
80     private static void zeroAndOne(char[] arr, int i) {
81         boolean bool = true;
82         for (int j = i; j < arr.length; j++) {
83             if (bool) {
84                 arr[j] = '0';
85                 bool = false;
86             }else{
87                 arr[j] = '1';
88                 bool = true;
89             }
90         }
91     }
92 }
View Code

2.

原文地址:https://www.cnblogs.com/jslee/p/3477271.html