leetcode 967. 连续差相同的数字

题目描述:

返回所有长度为 N 且满足其每两个连续位上的数字之间的差的绝对值为 K 的非负整数

请注意,除了数字 0 本身之外,答案中的每个数字都不能有前导零。例如,01 因为有一个前导零,所以是无效的;但 0 是有效的。

你可以按任何顺序返回答案。

示例 1:

输入:N = 3, K = 7
输出:[181,292,707,818,929]
解释:注意,070 不是一个有效的数字,因为它有前导零。

示例 2:

输入:N = 2, K = 1
输出:[10,12,21,23,32,34,43,45,54,56,65,67,76,78,87,89,98]
``` 

**提示:**
+ `1 <= N <= 9`
+ `0 <= K <= 9`


---

# 解法:
```cpp
class Solution {
public:
    vector<int> numsSameConsecDiff(int N, int K) {
        if(N == 1){
            return {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        }
        vector<int> cur = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        vector<int> nxt;
        while(--N){
            nxt.clear();
            for(int val : cur){
                int digit = val%10;
                if(K == 0){
                    nxt.push_back(val*10 + digit);
                }else{
                    if(digit + K < 10){
                        nxt.push_back(val*10 + digit + K);
                    }
                    if(digit - K >= 0){
                        nxt.push_back(val*10 + digit - K);
                    }
                }
            }
            cur = nxt;
        }
        return cur;
    }
};
posted @ 2019-06-21 10:14  zhanzq1  阅读(350)  评论(0)    收藏  举报