leetcode 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sequential-digits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
从low开始依次查找
1:求出low的第一个数字a和位数c.
2:由a和c拼接出次序数f。
3:若是a + c > 10,说明溢出了,需要进位, a 变成了1, c = c + 1.
4:否则,则寻找下一个次序数。
5:需要判断次序数在low和height范围内。
public List<Integer> sequentialDigits(int low, int high) { List<Integer> list = new ArrayList<>(); int c = 0; int lc = low; int a = 0; while (lc != 0) { c++; a = lc; lc /= 10; } int f = a; int p = 1; for (int i = 1; i < c; i++) { p *= 10; f = f * 10 + a + i; } while (f <= high) { if (a + c > 10) { a = 1; c++; p *= 10; f = 1; for (int i = 1; i < c; i++) { f = f * 10 + a + i; } } else { if (f >= low) { list.add(f); } f = f % p * 10 + a + c; a++; } } return list; }