题目描述:
Print numbers from 1 to the largest number with N digits by recursion.
Notice
It's pretty easy to do recursion like:
recursion(i) {
if i > largest number:
return
results.add(i)
recursion(i + 1)
}
however this cost a lot of recursion memory as the recursion depth maybe very large. Can you do it in another way to recursive with at most N depth?
Example
Given N = 1
, return [1,2,3,4,5,6,7,8,9]
.
Given N = 2
, return [1,2,3,4,5,6,7,8,9,10,11,12,...,99]
.
Challenge
题目思路:
Do it in recursion, not for-loop.
既然要求N depth,那就是每次recursion都print i-digit的数字,比如第一次print 1~9,第二次print 10~99,etc。
Mycode(AC = 182ms):
class Solution {
public:
/**
* @param n: An integer.
* return : An array storing 1 to the largest number with n digits.
*/
vector<int> numbersByRecursion(int n) {
// write your code here
vector<int> ans;
numbersByRecursion(ans, 1, 10, 1, n);
return ans;
}
void numbersByRecursion(vector<int>& ans, int start, int end, int level, int n) {
if (level > n) {
return;
}
// output numbers with 'level'-digits
for (int i = start; i < end; i++) {
ans.push_back(i);
}
numbersByRecursion(ans, end, end * 10, level + 1, n);
}
};