LeetCode[967]连续差相同的数字

这题的标签有问题。。我本来是想熟悉一下dp的,然而这道题似乎不用dp更简单一点,现在反而是递归越用越熟练。

前面递归已经降了很多了,这题只要知道是用递归,后面就很简单了,不再赘述。如有更好的方法或任何问题,都欢迎指出。

class Solution {
public:
    vector<int> numsSameConsecDiff(int N, int K) {
        int startdigit = (N == 1) ? 0: 1;
        vector<int> ans;
        while (startdigit < 10) {
            vector<int> subans = recursion(startdigit, N-1, K);
            ans.insert(ans.end(), subans.begin(), subans.end());
            ++startdigit;
        }
        return ans;
    }
    
    vector<int> recursion(int root, int N, int K) {
        vector<int> sub1;
        if (N == 0) {
            sub1.push_back(root);
            return sub1;
        }
        int lastdigit = root%10;
        int nextdigit = lastdigit + K;
        if (nextdigit < 10) {
            sub1 = recursion(root*10+nextdigit, N-1, K);
        }
        vector<int> sub2;
        if (K != 0) {
            nextdigit = lastdigit - K;
            if (nextdigit >= 0) {
                sub2 = recursion(root*10+nextdigit, N-1, K);
                sub1.insert(sub1.end(), sub2.begin(), sub2.end());
            }
        }
        return sub1;
    }
};

 

posted @ 2019-02-25 22:53  left4back  阅读(333)  评论(0编辑  收藏  举报