题目:输入数字n,按顺序打印出从1到最大的n位二进制数。
比如输入3,则打印出1、2、3一直到最大的3位数即999。
解法1:
Java代码如下:
package demo;
public class Test11 {
public static void printOneToNthDigits(int n) {
if(n < 1) {
throw new RuntimeException("The input number must be larger than 0!");
}
//创建一个数组用于存放打印结果
int[] arr = new int[n];
printOneToNthDigits(0, arr);
}
/**
* @param n 当前处理的是第n个元素,从0开始计数
* @param arr 存放结果的数组
*/
private static void printOneToNthDigits(int n, int[] arr) {
// 说明所有的数据排列选择都已经处理完了
if(n >= arr.length) {
printArray(arr);
} else {
for(int i = 0; i <= 9; i++) {
arr[n] = i;
printOneToNthDigits(n+1, arr);
}
}
}
private static void printArray(int[] arr) {
// 找第一个非0的元素
int index = 0;
while(index < arr.length && arr[index] == 0) {
index++;
}
// 从第1个非0元素开始,输出到最后一个元素
for(int i = index; i < arr.length; i++) {
System.out.print(arr[i]);
}
// 条件成立,说明数组中有非0元素,所以需要换行
if(index < arr.length) {
System.out.println();
}
}
public static void main(String[] args) {
printOneToNthDigits(2);
}
}