打印1到最大的位数,算法采用回溯法
控制台输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
Process finished with exit code 0
代码如下:
/**
* @author liyiwen1
* @date 2016/12/21
*/
public class PrintN {
public static void main(String[] args) {
print( 2);
}
public static void print( int n){
int[] list = new int[n];
for ( int i = 0; i <= 9; ++i){
print(i, list, n, 0);
}
}
* @author liyiwen1
* @date 2016/12/21
*/
public class PrintN {
public static void main(String[] args) {
print( 2);
}
public static void print( int n){
int[] list = new int[n];
for ( int i = 0; i <= 9; ++i){
print(i, list, n, 0);
}
}
public static void print(int node, int[] list, int count, int index){//index 用于标记当前节点是第一位数字
list[index] = node;
if (index + 1 == count){//当当前的数字,已经到达要求位数时则要打印出这个数字
int flag =
0;
for ( int i = 0; i < list. length; ++i){
if (list[i] == 0){
if (flag == i){
++flag;
continue;
} else{
System. out.print(list[i]);
}
} else{
System. out.print(list[i]);
}
}
System. out.print( " ");
} else{
for ( int i = 0; i <= 9; ++i){
print(i, list, count, index + 1);
}
}
}
for ( int i = 0; i < list. length; ++i){
if (list[i] == 0){
if (flag == i){
++flag;
continue;
} else{
System. out.print(list[i]);
}
} else{
System. out.print(list[i]);
}
}
System. out.print( " ");
} else{
for ( int i = 0; i <= 9; ++i){
print(i, list, count, index + 1);
}
}
}
}