每日一题之顺次数
2020-04-15 本文已影响0人
this_is_for_u
题目1291:顺次数
我们定义「顺次数」为:每一位上的数字都比前一位上的数字大 1 的整数。
请你返回由 [low, high] 范围内所有顺次数组成的 有序 列表(从小到大排序)。
示例1:
输出:low = 100, high = 300
输出:[123,234]
示例2:
输出:low = 1000, high = 13000
输出:[1234,2345,3456,4567,5678,6789,12345]
提示:
10 <= low <= high <= 10^9
分析
既然是求顺次数,那就顺序遍历出来好啦,貌似没啥需要分析的...
代码
class Solution {
public:
vector<int> sequentialDigits(int low, int high) {
string str = "123456789";
string low_str = std::to_string(low);
int low_len = low_str.size();
return dfs(str, low_len, low, high);
}
vector<int> dfs(string &str, int low_len, int low, int high) {
vector<int> ret;
for (int i = low_len; i < 10; ++i) {
for (int j = 0; j + i <= str.size(); ++j) {
string tem_str = str.substr(j, i);
int tem_int = stoi(tem_str);
if (tem_int > high) {
return ret;
}
if (tem_int >= low) {
ret.push_back(tem_int);
}
}
}
return ret;
}
};