面试题17:打印从1到最大的n位数

输入数字n,按顺序打印出从1到最大的N位十进制数,比如输入3,则打印出1、2、3一直到最大的3位数999.

public class printOneToN {
    public static void main(String args[]){
        Solution17 solution17 = new Solution17();
        solution17.print1ToMaxOfNDigits(3);
    }
}

class Solution17{
    void print1ToMaxOfNDigits(int n){
        if(n<0){
            return;
        }
        char charArr[] = new char[n];
        for(int i=0; i<n; i++){
            charArr[i]='0';
        }
        while(!increment(charArr)){
            printNumber(charArr);
        }
    }

    private boolean increment(char[] charArr){
        boolean isOverflow=false;
        int nTakeOver = 0;
        int arrLength=charArr.length;

        for(int i=arrLength-1; i>=0; i--){
            int iSum=charArr[i]- '0' + nTakeOver;

            if(i==arrLength-1){
                iSum++;
            }
            if(iSum >= 10){
                if(i==0){
                   isOverflow=true;
                }else{
                    nTakeOver=1;
                    iSum-=10;
                    charArr[i]=(char)(iSum+'0');
                }
            }else{
                charArr[i] = (char)(iSum+'0');
                break;
            }
        }
        return isOverflow;
    }

    private void printNumber(char[] charArr){
        boolean isZero=true;

        for(int i=0; i<charArr.length; i++){
            if(isZero && charArr[i]!='0'){
                isZero=false;
            }

            if(!isZero){
                System.out.print(charArr[i]);
            }
        }
        System.out.println();
    }
}
原文地址:https://www.cnblogs.com/Allen-win/p/8280856.html