文章目錄
- 1. 題目
- 2. 解題
- 2.1 DFS
- 2.2 BFS
1. 題目
回傳所有長度為 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
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/numbers-with-same-consecutive-differences
著作權歸領扣網路所有,商業轉載請聯系官方授權,非商業轉載請注明出處,
2. 解題
- 簡單的模板題,一起加油!
2.1 DFS
class Solution {
vector<int> ans;
public:
vector<int> numsSameConsecDiff(int N, int K) {
if(N == 1)
return {0,1,2,3,4,5,6,7,8,9};
for(int i = 1; i <= 9; ++i)
dfs(1,N,K,i);
return ans;
}
void dfs(int count, int N, int K, int num)
{
if(count == N)//位數夠了
{
ans.push_back(num);
return;
}
int last = num%10;
if(last+K <= 9)
dfs(count+1, N, K, num*10+last+K);
if(last-K >= 0 && K != 0) // K 為0,跟上面重復了
dfs(count+1, N, K, num*10+last-K);
}
};
8 ms 8.2 MB
2.2 BFS
class Solution {
vector<int> ans;
public:
vector<int> numsSameConsecDiff(int N, int K) {
if(N == 1)
return {0,1,2,3,4,5,6,7,8,9};
queue<int> q;
for(int i = 1; i <= 9; ++i)
q.push(i);
int cur, lastbit, size, len = 1;
while(!q.empty())
{
size = q.size();
while(size--)
{
cur = q.front();
q.pop();
if(len == N)//位數夠了
ans.push_back(cur);
lastbit = cur%10;
if(lastbit+K <= 9 && len < N)
q.push(cur*10+lastbit+K);
if(lastbit-K >= 0 && len < N && K != 0) // K 為0,跟上面重復了
q.push(cur*10+lastbit-K);
}
++len;//位數+1
}
return ans;
}
};
4 ms 7.6 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/2843.html
標籤:其他
上一篇:Tomcat“湯姆貓?“ ---------web應用服務器(個人整理)
下一篇:QQ登錄界面實作
