Skip to main content

17 打印从 1 到最大的 n 位数

牛客

(牛客实际返回的是整数数组,《剑指offer》是打印字符串)

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

public class Solution {

public int[] printNumbers (int n) {

int[] res=new int[(int)Math.pow(10,n)-1];
res[0]=1;
char[] arr=new char[n];
arr[n-1]='1';
for(int i=0;i<n-1;++i){
arr[i]='0';
}
int times=10;
int len=1;
for(int i=2;i<=res.length;++i){
arr[n-1]++;
incr(arr);
if(i%times==0){
len++;
times*=10;
}
String s=new String(arr,n-len,len);
res[i-1]=Integer.valueOf(s);
}

return res;
}
//进位
private void incr(char[] arr){
for(int index=arr.length-1;index>=1;--index){
if(arr[index]==':'){
arr[index]='0';
arr[index-1]++;
if(arr[index-1]!=':') break;
}
}
}
}