【递归】用递归打印数字

题目要求

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

思路解析

直接暴力会栈溢出,需要减少递归次数。
在main方法里面,首先把数字的最高位给定好,从0一直到9。
然后在递归方法里面再往次高位递归,一直到最低位,直接加到数组里即可。

要注意的点

  • Java里字符数组及各种类型转换的使用方式
  • 递归的条件、结束时的状态

Java实现

public class Solution {
    /**
     * @param n: An integer
     * @return: An array storing 1 to the largest number with n digits.
     */
    
    private List<Integer> result = new ArrayList<Integer>();

    public void recurse(char[] cur, int n, int i) {
        if(i == n-1) {
            StringBuilder tmpStr = new StringBuilder();
            for(char j : cur) {
                tmpStr.append(j);
            }
            result.add(Integer.valueOf(tmpStr.toString()));
            return;
        }

        for(int j=0; j<10; j++) {
            String tmpStr = String.valueOf(j);
            cur[i+1] = tmpStr.charAt(0);
            recurse(cur, n, i+1);
        }
    }

    public List<Integer> numbersByRecursion(int n) {
        // write your code here
        if(n == 0) return null;
        char[] cur = new char[n];
        Arrays.fill(cur, '0');
        for(int i=0; i<10; i++) {
            String tmpStr = String.valueOf(i);
            cur[0] = tmpStr.charAt(0);
            recurse(cur, n, 0);
        }
        return result.subList(1, result.size());
    }
}

本题需要感谢大佬帮助理解递归过程。

posted @ 2020-04-18 22:51  アカツキ  阅读(254)  评论(0编辑  收藏  举报