zoukankan      html  css  js  c++  java
  • LeetCode 1215. Stepping Numbers

    原题链接在这里:https://leetcode.com/problems/stepping-numbers/

    题目:

    Stepping Number is an integer such that all of its adjacent digits have an absolute difference of exactly 1. For example, 321 is a Stepping Number while 421 is not.

    Given two integers low and high, find and return a sorted list of all the Stepping Numbers in the range [low, high] inclusive.

    Example 1:

    Input: low = 0, high = 21
    Output: [0,1,2,3,4,5,6,7,8,9,10,12,21]

    Constraints:

    • 0 <= low <= high <= 2 * 10^9

    题解:

    The candidate stepping numbers starting from 1, 2, 3...9.

    If the current stepping number is 1, the generated ones based on it could 10 or 12.

    Use BFS to iteate all possible candidates, if current number is within [low, high], add it to res.

    Ortherwise, if it is <= high/10, in case of overflow, add its generated numbers to queue.

    Corner case is 0. If low is 0, add it specifically. Because generated number 01 is not leagal.

    Time Complexity: O(2^n). 9*(2^0 + 2^1 + 2^2 + ... + 2^n). n is digit number of high.

    Space: O(2^n).

    AC Java:

     1 class Solution {
     2     public List<Integer> countSteppingNumbers(int low, int high) {
     3         List<Integer> res = new ArrayList<>();
     4         if(low > high){
     5             return res;
     6         }
     7         
     8         LinkedList<Integer> que = new LinkedList<>();
     9         for(int i = 1; i<=9; i++){
    10             que.add(i);
    11         }
    12         
    13         if(low == 0){
    14             res.add(0);
    15         }
    16         
    17         while(!que.isEmpty()){
    18             int cur = que.poll();
    19             if(cur >= low && cur <= high){
    20                 res.add(cur);
    21             }
    22             
    23             if(cur <= high/10){
    24                 int lastDigit = cur%10;
    25                 if(lastDigit > 0){
    26                     que.add(cur*10 + lastDigit - 1);
    27                 }
    28                 
    29                 if(lastDigit < 9){
    30                     que.add(cur*10 + lastDigit + 1);
    31                 }
    32             }
    33         }
    34         
    35         return res;
    36     }
    37 }
  • 相关阅读:
    android 本地通知
    android qq开合表
    android 获取经纬度
    android读取通讯录和使用系统通讯录
    android Dialog官方demo
    android Listview分页
    android 瀑布流
    2020-08-16:数据任务是怎么优化的?(数据倾斜,参数相关调节)
    2020-08-15:什么情况下数据任务需要优化?
    2020-08-14:数据任务的执行引擎用的哪些?
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11833294.html
Copyright © 2011-2022 走看看