如果一个整数上的每一位数字与其相邻位上的数字的绝对差都是 1,那么这个数就是一个「步进数」。

例如,321 是一个步进数,而 421 不是。

给你两个整数,low 和 high,请你找出在 [low, high] 范围内的所有步进数,并返回 排序后 的结果。

示例:

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

提示:

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

思路:一开始暴力解法,但是取值范围2*10^9,呃,明显不可能通过

先把所有步进数求出来放到一个集合,排下序。然后再遍历取其中在low与high范围内的数添加到结果集合
求步进数是用 DFS 的方法,以 1 到 9 开头,每次把当前数乘 10 加上个位数加 1 或减 1。注意一下个位为 0 和 9 的特殊情况。
0 特殊处理。

提交的代码:

class Solution {
   public static List<Integer> countSteppingNumbers(int low, int high) {
        int i;
        List<Integer> list = new ArrayList();
        List<Integer> list1 = new ArrayList();
        list.add(0);
        for(i=1;i<=9;i++)
        {
            DFS(list,i);
        }
        Collections.sort(list);
        for(int in:list)
        {
            if(in>=low&&in<=high)
            {        
                list1.add(in);
            }
        }
        return list1;
        
    }
    public static void DFS(List<Integer> list,int i)
    {
        list.add(i);
        if(i>Integer.MAX_VALUE / 10)
        {
            return;
        }
        if(i%10!=0)
        {
            DFS(list,(i%10-1+i*10));
        }
        if(i%10!=9)
        {
            DFS(list,(i%10+1+i*10));
        }
    }
}

完整代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class Solution5081 {
    public static List<Integer> countSteppingNumbers(int low, int high) {
        int i;
        List<Integer> list = new ArrayList();
        List<Integer> list1 = new ArrayList();
        list.add(0);
        for(i=1;i<=9;i++)
        {
            DFS(list,i);
        }
        Collections.sort(list);
        for(int in:list)
        {
            if(in>=low&&in<=high)
            {        
                list1.add(in);
            }
        }
        return list1;
        
    }
    public static void DFS(List<Integer> list,int i)
    {
        list.add(i);
        if(i>Integer.MAX_VALUE / 10)
        {
            return;
        }
        if(i%10!=0)
        {
            DFS(list,(i%10-1+i*10));
        }
        if(i%10!=9)
        {
            DFS(list,(i%10+1+i*10));
        }
    }
    public static void main(String[] args)
    {
        int low,high;
        low = 10;
        high =15;
        List list = countSteppingNumbers(low,high);
        Iterator it  = list.iterator();
        while(it.hasNext())
        {
            System.out.println(it.next());
        
        }
        
    }
}

可以在DFS中中加入low,high判断条件,这样无需找出所有的步进数。

提交的代码:

class Solution {
   public static List<Integer> countSteppingNumbers(int low, int high) {
        int i;
        List<Integer> list = new ArrayList();
        if(low==0)
        {
            list.add(0);
        }
        for(i=1;i<=9;i++)
        {
            DFS(list,i,low,high);
        }
        Collections.sort(list);
        return list;
        
    }
    public static void DFS(List<Integer> list,int i,int low,int high)
    {
        if(i>=low&&i<=high)
        {
            list.add(i);
        }
        
        if(i>Integer.MAX_VALUE / 10)
        {
            return;
        }
        if(i%10!=0&&(i%10-1+i*10)>=0&&(i%10-1+i*10)<=high)
        {
            DFS(list,(i%10-1+i*10),low,high);
        }
        if(i%10!=9&&(i%10+1+i*10)>=0&&(i%10+1+i*10)<=high)
        {
            DFS(list,(i%10+1+i*10),low,high);
        }
    }
}

完整代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class Solution5081 {
    public static List<Integer> countSteppingNumbers(int low, int high) {
        int i;
        List<Integer> list = new ArrayList();
        if(low==0)
        {
            list.add(0);
        }
        for(i=1;i<=9;i++)
        {
            DFS(list,i,low,high);
        }
        Collections.sort(list);
        return list;
        
    }
    public static void DFS(List<Integer> list,int i,int low,int high)
    {
        if(i>=low&&i<=high)
        {
            list.add(i);
        }
        
        if(i>Integer.MAX_VALUE / 10)
        {
            return;
        }
        if(i%10!=0&&(i%10-1+i*10)>=0&&(i%10-1+i*10)<=high)
        {
            DFS(list,(i%10-1+i*10),low,high);
        }
        if(i%10!=9&&(i%10+1+i*10)>=0&&(i%10+1+i*10)<=high)
        {
            DFS(list,(i%10+1+i*10),low,high);
        }
    }
    public static void main(String[] args)
    {
        int low,high;
        low = 0;
        high =21;
        List list = countSteppingNumbers(low,high);
        Iterator it  = list.iterator();
        while(it.hasNext())
        {
            System.out.println(it.next());
        
        }
        
    }
}

Leetcode--5081. 步进数相关推荐

  1. LeetCode 1215. 步进数(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 如果一个整数上的每一位数字与其相邻位上的数字的绝对差都是 1,那么这个数就是一个「步进数」. 例如,321 是一个步进数, ...

  2. 【Leetcode】精选算法top200道(二)

    二.中等 339.嵌套列表权重和 给定一个嵌套的整数列表 nestedList ,每个元素要么是整数,要么是列表.同时,列表中元素同样也可以是整数或者是另一个列表. 整数的 深度 是其在列表内部的嵌套 ...

  3. leetcode题目

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>Lee ...

  4. LeetCode 787. Cheapest Flights Within K Stops

    题解 这题看似最短路径,但是暗藏变化. 首先想到dfs,搜索到所有由始至终的可行路径,记录最小cost即可. 但是这题编程实现有很多小花招,怎么剪枝,一个是k(步进的次数), 二是cost,都可以用来 ...

  5. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  6. Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)...

    最近在开发中使用到了UpDown这个控件,但是因为之前没有使用过,所以很不熟悉,于是就编写了一个简单的demo来学习UpDown以及其结合TEdit的用法. 初步的常用功能的简介 目前(2015.08 ...

  7. 【机器学习基础】时间序列测试题的40题,看看你对时间序列的了解水平

      磐创AI分享   作者 | SAURABH JAJU 编译 | Flin 来源 | analyticsvidhya 介绍 时间序列预测与建模在数据分析中起着重要的作用.时间序列分析是统计学的一个分 ...

  8. Raft算法和开源实现

    CoreOS是一个基于Docker的轻量级容器化Linux发行版,专为大型数据中心而设计,旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度.CoreOS作为Docker生态 ...

  9. python123查找指定字符输入m_大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编....

    Presentation on theme: "大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编."- Presentat ...

最新文章

  1. 模型剪枝(Pruning)
  2. 一线大厂Java开发所需掌握的技能要点汇总
  3. P2286 [HNOI2004]宠物收养场
  4. go在方法中修改结构体的值_[Go]结构体及其方法
  5. 太真实了!有个程序员男友原来是这样的!
  6. Non-parseable POM C:\Users\admin\.m2\repository\org\springframework问题解决方案
  7. 小程序短视频项目———视频详情页面开发(二)
  8. 微信小程序 图片显示不完全
  9. 【SAS BASE】SAS格式、缺失值表示、命名规则及路径
  10. Photoshop 有什么技巧让你相见恨晚?
  11. 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与YIQ颜色空间转换
  12. ultraiso刻录linux系统盘,使用UltraISO在Windows 10下刻录Ubuntu 18.04.2 U盘的方法
  13. 你的生存模式正确吗?
  14. SDNU_ACM_ICPC_2019_Winter_Practice_9th题解
  15. OpenAPI 标准规范,了解一下?
  16. 这三种创业项目不要轻易涉足
  17. 基于verilog的数字频率计数器
  18. KITTI 3D目标检测数据集入门
  19. DS1307时钟模块
  20. python实现企查猫的自动化注册

热门文章

  1. 程序员面试金典 - 面试题 05.01. 插入(位运算)
  2. LintCode 1753. 写作业(二分查找)
  3. 回溯应用-- 0-1背包问题
  4. 数据结构--队列Queue--循环顺序队列
  5. 完全相同的4个小矩形如图所示放置_吸睛!矩形在PPT中的创意表现
  6. linux 中文 音乐播放器,linux下的常见音乐播放器
  7. LeetCode第45场双周赛-解题报告
  8. python语言支持函数式编程_Python语言之Pyhton入门笔记函数式编程
  9. 排得更好VS估得更准VS搜的更全「推荐、广告、搜索」算法间到底有什么区别?...
  10. Spring Boot多数据源配置与使用