【剑指Offer 12】打印1到最大的n位数

题目:输入数字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);
    }
}

来源:http://blog.csdn.net/derrantcm/article/details/45529157

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容