美文网首页
算法之打印1至n位最大数

算法之打印1至n位最大数

作者: _hudson_ | 来源:发表于2017-11-11 18:34 被阅读0次

题目原型

输入一个数字n,请打印从1到n位最大数。例如输入3,则打印1-999的数

分析与注意

由于题目并没有限定n的范围,所以很容易出现n非常大导致使用整型数据时出现溢出的问题。因此我们应当避免使用整型数据作为直接操作数,换一种思路就是使用字符或字符串了。

方法与思路

思路一:使用字符数组递增方式

public static void printNumber(char[] result,int n){
        if(n<=0){
            return;
        }
        int overFlow = 0;
        //产生数字,为每一位数据产生值
        for(int i=n-1;i>=0;i--){
            int bitNumber = result[i] - '0' + overFlow;
            overFlow = 0;
            if(i == n - 1){//如果是最后一位,每次自增1
                bitNumber ++;
            }
            if(bitNumber==10){
                overFlow = 1;
                bitNumber -= 10;
            }
            result[i] = (char) (bitNumber + '0');
        }
        if(overFlow==0){//如果最后一位数都有溢出,那么超出了范围
            printNumber(result);
            printNumber(result,n);
            return;
        }
    }

思路二:使用全排列方式

public static void permutation(char[] result,int curIndex){
        if(result == null || curIndex<0){
            return; 
        }
        if(curIndex > result.length - 1){//最后一位也要参与
            printNumber(result);
            return ;
        }
        for(int i=0;i<10;i++){
            result[curIndex] = (char) ('0' + i);
            permutation(result, curIndex+1);
        }
    }

源码下载

https://github.com/HudsonAndroid/DataStructureAlgorithm/tree/master/1.%E6%89%93%E5%8D%B0%E4%BB%8E1%E5%88%B0%E6%9C%80%E5%A4%A7%E7%9A%84n%E4%BD%8D%E6%95%B0

相关文章

网友评论

      本文标题:算法之打印1至n位最大数

      本文链接:https://www.haomeiwen.com/subject/puhgmxtx.html