题目:输入数字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,"");
}
}
网友评论