题目描述
解题思路
确定10的n次方减1是最大打印数,依次打印即可。
但是,如果不考虑大数问题,这题将失去意义。
代码实现
package cz;
public class PrintNumbers_0805 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=1;
int []res=printNumbers(n);
System.out.print(n);
}
public static int[] printNumbers(int n) {
int [] res=new int [(int) (Math.pow(10, n)-1)];
int temp=(int) (Math.pow(10, n)-1);
for(int i=0;i<temp;i++) {
res[i]=i+1;
}
return res;
}
}
考虑大数的实现:
package cz;
public class PrintNumbers_0805 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=1;
int []res=printNumbers(n);
System.out.print(n);
}
static int count=0;
public static int[] printNumbers(int n) {
int max=(int) (Math.pow(10, n)-1);
int [] res=new int [max];
for(int len=1;len<=n;len++) {
for(int i=1;i<10;i++) {
StringBuilder sb=new StringBuilder();
sb.append(i);
dfs(1,len,sb,res);
}
}
return res;
}
private static void dfs(int idx, int n, StringBuilder sb, int[] res) {
// TODO Auto-generated method stub
if(idx==n) {
res[count++]=Integer.parseInt(sb.toString());
return;
}
for(int i=0;i<10;i++) {
sb.append(i);
dfs(idx+1,n,sb,res);
sb.deleteCharAt(sb.length()-1);
}
}
}