[剑指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);
}
}
};