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 }
  • 相关阅读:
    微信小程序用vant,dialog弹出框
    小程序太阳码 ,不发布也可以测试
    php ,通过password与salt共同来验证登录
    vscode 使用less开发微信小程序
    php命名规范
    61键 如何打波浪线
    php 循环使用
    记一次,物业费时间交集问题
    Mac拖拽文件
    python 支持中文
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11833294.html
Copyright © 2011-2022 走看看