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 }
  • 相关阅读:
    小程序(二)
    React 之 项目搭建
    mac 终端 常用命令
    css 之 动画(翻转动画例子)
    css 之 单位
    Git 常见操作
    css 之 页面常用布局
    mac版vscode快捷键
    JSX
    Rem适配原理
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11833294.html
Copyright © 2011-2022 走看看