用递归打印数字

题目

用递归的方法找到从1到最大的N位整数。

解题

线性打印

    public List<Integer> numbersByRecursion(int n) {
        // write your code here
        List<Integer> result = new ArrayList<Integer>();
        int Max = (int)Math.pow(10,n);
        for(int i=1;i< Max;i++)
            result.add(i);
        return result;

    }

递归看下面程序理解

public class Solution {
    /** * @param n: An integer. * return : An array storing 1 to the largest number with n digits. */
    public List<Integer> numbersByRecursion(int n) {
        // write your code here

        List<Integer> result = new ArrayList<Integer>();
        if(n<=0)
            return result;
        PrintN(n,result);
        return result;

    }
    public int PrintN(int n,List<Integer> res){
        if(n==0){
            return 1;
        }
        int base = PrintN(n-1,res);
        int size = res.size();
        for(int i = 1;i<= 9;i++){
            int subbase = base*i;
            res.add(subbase);
            for(int j= 0;j< size ;j++){
                res.add(subbase+res.get(j));
            }
        }
        return base*10;
    }
}

分析待完善

你可能感兴趣的:(剑指offer)