题目:输入一个数字n,按顺序打印从1到最大的n位十进制.
思路:打印就行了,考虑大数问题,可以用字符数组模拟加法,也可以使用全排列
解法1:字符数组模拟加法
public class PrintToMaxOfNDight_1 {
public static void print_1(int n){
if(n<0){
return;
}
char[] toPrint = new char[n];
init(toPrint);
while(!isEnough(toPrint)){
addOne(toPrint);
System.out.println(Arrays.toString(toPrint));
}
}
private static void addOne(char[] source){
int flag= 1;
for(int i=source.length-1;i>=0&&flag==1;i--){
source[i] = (char) (source[i]+flag);
if(source[i]=='9'+1){
source[i]='0';
flag = 1;
}else{
flag = 0;
}
}
}
private static boolean isEnough(char[] source){
for(int i=0;i
解法2:全排列n位数
public class PrintToMaxOfNDight_2 {
public static void main(String[] args) {
print(10, 0, new StringBuilder());
}
public static void print(int n, int step, StringBuilder toPrint) {
if (n < 0) {
return;
}
if (step == n) {
System.out.println(toPrint);
return;
}
boolean[] book = new boolean[10];
for (int i = 0; i <= 9; i++) {
if (!book[i]) {
book[i] = true;
toPrint.append(i);
print(n, step + 1, toPrint);
toPrint.deleteCharAt(toPrint.length() - 1);
book[i] = false;
}
}
}
}
输出都没有做处理,去掉前导0就可以了