[剑指offer] 用递归打印数字

http://www.lintcode.com/zh-cn/problem/print-numbers-by-recursion/

做法类似于打印全排列,走一遍全排列的枚举树,从最高位开始一位一位地遍历,直到最低位形成一个数字,每一位都有0~9(十叉树)。

class Solution {
public:
    /**
     * @param n: An integer.
     * return : An array storing 1 to the largest number with n digits.
     */
    vector<int> numbersByRecursion(int n) {
        if (n <= 0) return vector<int>();
        
        vector<int> nums;
        dfs(nums, n, 0);
        return nums;
    }

private:
    void dfs(vector<int>& nums, int n, int cur) {
        // n: 还剩下几位, cur: 当前数值
        if (n == 0) {
            if (cur > 0) nums.push_back(cur);
            return;
        }
        
        for (int i = 0; i < 10; ++i) {
            dfs(nums, n - 1, cur * 10 + i);
        }
    }
};
原文地址:https://www.cnblogs.com/ilovezyg/p/6973952.html