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;
    }

 

 

posted @ 2021-10-02 20:19  旺仔古李  阅读(66)  评论(0编辑  收藏  举报