LeetCode 1215. 步进数(BFS/DFS)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1215. 步进数(BFS/DFS)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 BFS
- 2.2 DFS
1. 題目
如果一個整數上的每一位數字與其相鄰位上的數字的絕對差都是 1,那么這個數就是一個「步進數」。
例如,321 是一個步進數,而 421 不是。
給你兩個整數,low 和 high,請你找出在 [low, high] 范圍內的所有步進數,并返回 排序后 的結果。
示例: 輸入:low = 0, high = 21 輸出:[0,1,2,3,4,5,6,7,8,9,10,12,21]提示: 0 <= low <= high <= 2 * 10^9來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/stepping-numbers
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
2.1 BFS
- 0 是特殊的,單獨檢查
- 然后從1-9開始入度,每次乘以10+末尾數(±1,為9的時候不加,為0的時候不減)
40 ms 14.5 MB
2.2 DFS
class Solution {vector<int> ans; public:vector<int> countSteppingNumbers(int low, int high) {if(low == 0) ans.push_back(0);for(int i = 1; i <= 9; ++i)dfs(i, low, high);sort(ans.begin(), ans.end());return ans;}void dfs(long long n, int low, int high){int last = n%10;if(n >= low && n <= high)ans.push_back(n);if(last!=0 && n*10+last-1 <= high)dfs(n*10+last-1, low, high);if(last!=9 && n*10+last+1 <= high)dfs(n*10+last+1, low, high); } };40 ms 13.7 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 1215. 步进数(BFS/DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 698. 划分为k个相
- 下一篇: LeetCode 1130. 叶值的最小