lintcode - 역귀로 숫자 인쇄

1133 단어
돌아가는 방법은 1에서 가장 큰 N자리 정수를 찾을 수 있습니다. 
예제
제시N = 1, 반환[1,2,3,4,5,6,7,8,9].
제시N = 2, 반환[1,2,3,4,5,6,7,8,9,10,11,...,99].
주의
다음과 같은 방법으로 귀속시키는 것은 사실 매우 쉽다.
recursion(i) {
    if i > largest number:
        return
    results.add(i)
    recursion(i + 1)
}

그러나 이런 방식은 많은 귀속 공간을 소모하여 창고가 넘쳐나게 한다.너는 다른 방식으로 귀환을 해서 귀환의 깊이를 최대 N층만 만들 수 있니
class Solution {
public:
    
    vector<int> numbersByRecursion(int n) {
        if(n<=0)
            return vector<int>();
        if(1==n)
            return {1,2,3,4,5,6,7,8,9};
        vector<int> ret;                                // 
        vector<int> tmp=numbersByRecursion(n-1);        // 
        copy(tmp.begin(),tmp.end(),back_inserter(ret)); // 
        for(int i=1;i<=9;++i){                          // 
            int base=pow(10,n-1)*i;
            ret.push_back(base);
            for(auto &e:tmp)                            // 
                ret.push_back(base+e);
        }
        return ret;
    }
};

좋은 웹페이지 즐겨찾기