跳到主要内容

967.连续差相同的数字

链接:967.连续差相同的数字
难度:Medium
标签:广度优先搜索、回溯
简介:返回所有长度为 n 且满足其每两个连续位上的数字之间的差的绝对值为 k 的 非负整数 。

题解 1 - cpp

  • 编辑时间:2021-12-30
  • 内存消耗:8.5MB
  • 编程语言:cpp
  • 解法介绍:dfs。
class Solution {
public:
void dfs(vector<int> &ans, int n, int k, int num) {
if (n == 0) {
ans.push_back(num);
return;
}
if (num % 10 + k <= 9) {
dfs(ans, n - 1, k, num * 10 + k + num % 10);
}
if (k != 0 && num % 10 - k >= 0) {
dfs(ans, n - 1, k, num * 10 - k + num % 10);
}
}
vector<int> numsSameConsecDiff(int n, int k) {
vector<int> ans;
for (int i = 1; i <= 9; i++) dfs(ans, n - 1, k, i);
return ans;
}
};

题解 2 - cpp

  • 编辑时间:2022-02-18
  • 内存消耗:8.3MB
  • 编程语言:cpp
  • 解法介绍:dfs。
class Solution {
public:
int n, k;
vector<int> ans;
void dfs(int cur, int cnt, int last) {
if (cnt == 0) {
ans.push_back(cur);
return;
}
if (last + k < 10) dfs(cur * 10 + last + k, cnt - 1, last + k);
if (k != 0 && last - k >= 0)
dfs(cur * 10 + last - k, cnt - 1, last - k);
}
vector<int> numsSameConsecDiff(int n, int k) {
this->n = n;
this->k = k;
for (int i = 1; i <= 9; i++) dfs(i, n - 1, i);
return ans;
}
};