剑指offer17 打印从1到最大的n位数

2018-12-25  本文已影响0人  灰化肥发黑会挥发

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

测试用例:输入负数,输入n很大,是否会溢出。

将输出变成字符串。定义2个函数,主函数,输出函数,还有判断是否符合条件。

public void PrintN(int n){
  if n<0:
    return;
char[] number = new char[n+1];
while(!Increment(number)){
  PrintNumber(number);
  }
}
##此方法用于判断是否到达了最大值
public boolean Increment(char number){
    int nLength = number.length();
          int nTakeOver = 0;
         for(int i= nLength-1;i>=0;i--){
                  int num = number[i]-'0'+nTakeOver;
                  if(i==nLegth-1)
                      num++;
                  if(num==10){
                        if(i==0)  
                       else{
                              nTakeOver = 0;
                              number[i] = '' + num+nTakeOver ;
                            }
                    }
                 else
                          number[i] ='' + num;
                        break;

}
 return false;
}
##此方法用于输出值,需要注意判断去除最前面的0,
public void PrintNumber(char number){
   bool isBeginning0 = true;
  int nLength = number.length();
   for(int i=0;i<nlength;i++){
    if(isBeginning0&&number!='0')
         isBeginning0 = false;
    if(isBegining0)
      print(number[i])
}
}
      

解法2:其实已经知道最大长度了,可以考虑全排列的方式直接打印出来。

public class Solution {
    public static void printLenN(int m,String str){
        if(m<0){
            return;
        }
        if (m==0){
            System.out.println(str);
        }
        for(int i=0;i<10;i++){
            str +=i;
            printLenN(m-1,str);
            str = str.substring(0,str.length()-1);
        }

    }
    public static void main(String[] args){
        printLenN(5,"");
    }
}

上一篇 下一篇

猜你喜欢

热点阅读