題目:輸入數(shù)字n,按順序打印出從1到最大的n位二進制數(shù)。
比如輸入3,則打印出1、2、3一直到最大的3位數(shù)即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!");
}
//創(chuàng)建一個數(shù)組用于存放打印結(jié)果
int[] arr = new int[n];
printOneToNthDigits(0, arr);
}
/**
* @param n 當前處理的是第n個元素,從0開始計數(shù)
* @param arr 存放結(jié)果的數(shù)組
*/
private static void printOneToNthDigits(int n, int[] arr) {
// 說明所有的數(shù)據(jù)排列選擇都已經(jīng)處理完了
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]);
}
// 條件成立,說明數(shù)組中有非0元素,所以需要換行
if(index < arr.length) {
System.out.println();
}
}
public static void main(String[] args) {
printOneToNthDigits(2);
}
}