zoukankan      html  css  js  c++  java
  • 数字

    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.

  • 相关阅读:
    (4.38)sql server中的事务控制及try cache错误处理
    (4.37)sql server中的系统函数
    【3.5】mysql常用开发规则30条
    Linux学习笔记(17)Linux防火墙配置详解
    (5.16)mysql高可用系列——keepalived+mysql双主ha
    mysql online DDL
    (5.3.8)sql server升级打补丁
    python request
    python 模块被引用多次但是里面的全局表达式总共只会执行一次
    Protocol Buffer Basics: Python
  • 原文地址:https://www.cnblogs.com/jslee/p/3477271.html
Copyright © 2011-2022 走看看