[抄题]:

Given an integer n, return 1 - n in lexicographical order.

For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9].

Please optimize your algorithm to use less time and space. The input size may be as large as 5,000,000.

[暴力解法]:

时间分析:

空间分析:

[优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

cur * 10 + i 进位时>n就退出

[思维问题]:

不知道怎么做dfs:多开几个变量,用cur记录当前可以进位的数,0-9,加i,也0-9.

[英文数据结构或算法,为什么不用别的数据结构或算法]:

lexico举例时,就是for 0-9就行了

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 可用于递归的数字记录为cur, 从1开始

[二刷]:

  1. 同一个dfs中的n和i是不变的。i变化时return换i, cur变化时return换cur。(在谁的主场return就换谁)

[三刷]:

  1. dfs写得不熟悉啊:先添加,再进行下一步扩展,而且dfs中要写传递的公式

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

不懂哪里错,究其原因还是对dfs不熟悉

[总结]:

[复杂度]:Time complexity: O() Space complexity: O(n)

[算法思想:迭代/递归/分治/贪心]:

[关键模板化代码]:

  1. public void dfs(int cur, int n, List<Integer> result) {
  2. //exit when cur > n
  3. if (cur > n) return;
  4.  
  5. //add the cur
  6. result.add(cur);
  7. //i loop from 0-9, go further dfs
  8. for (int i = 0; i <= 9; i++) {
  9. //exceed when new number > n
  10. if (10 * cur + i > n)
  11. return ;
  12. dfs(10 * cur + i, n, result);
  13. }
  14. }

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

[代码风格] :

[是否头一次写此类driver funcion的代码] :

[潜台词] :

  1. class Solution {
  2. public List<Integer> lexicalOrder(int n) {
  3. //initialization
  4. List<Integer> result = new ArrayList<Integer>();
  5.  
  6. //corner case
  7. if (n <= 0) return result;
  8.  
  9. //for loop for cur
  10. for (int cur = 1; cur <= 9; cur++) {
  11. dfs(cur, n, result);
  12. }
  13.  
  14. //return
  15. return result;
  16. }
  17.  
  18. public void dfs(int cur, int n, List<Integer> result) {
  19. //exit when cur > n
  20. if (cur > n) return;
  21.  
  22. //add the cur
  23. result.add(cur);
  24. //i loop from 0-9, go further dfs
  25. for (int i = 0; i <= 9; i++) {
  26. //exceed when new number > n
  27. if (10 * cur + i > n)
  28. return ;
  29. dfs(10 * cur + i, n, result);
  30. }
  31. }
  32. }

386. Lexicographical Numbers 输出1到n之间按lexico排列的数字序列的更多相关文章

  1. 【LeetCode】386. Lexicographical Numbers 解题报告(Python)

    [LeetCode]386. Lexicographical Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...

  2. LeetCode - 386. Lexicographical Numbers

    Given an integer n, return 1 - n in lexicographical order. For example, given 13, return: [1,10,11,1 ...

  3. 386. Lexicographical Numbers

    用DFS来做,先弄开头是1的,再弄开头是1的里面开头是1的,再开头是1的里面开头是1的里的开头是1的,再... 是吧-- 比N大了BREAK就行. 注意第一个循环是1-9,往后的循环是0-9. pub ...

  4. 386. Lexicographical Numbers 把1--n按字典序排序

    https://leetcode.com/problems/lexicographical-numbers/description/ 前20个是 1, 10, 11, 12, 13, 14, .... ...

  5. 386 Lexicographical Numbers 字典序排数

    给定一个整数 n, 返回从 1 到 n 的字典顺序.例如,给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] .请尽可能的优化算法的时间复杂度和空间复杂度. 输入 ...

  6. Java初学者作业——编写Java程序,输出1~100之间能够同时被3和4整除的最大的五个数字。

    返回本章节 返回作业目录 需求说明: 编写Java程序,输出1-100之间能够同时被3和4整除的最大的五个数字. 实现思路: 声明变量count,用于存储满足条件的数据个数,设置初始值为0. 在区间1 ...

  7. 输出2到n之间的全部素数

    本题要求输出2到n之间的全部素数,每行输出10个.素数就是只能被1和自身整除的正整数.注意:1不是素数,2是素数. 输入格式: 输入在一行中给出一个长整型范围内的整数. 输出格式: 输出素数,每个数占 ...

  8. 【LeetCode-面试算法经典-Java实现】【129-Sum Root to Leaf Numbers(全部根到叶子结点组组成的数字相加)】

    [129-Sum Root to Leaf Numbers(全部根到叶子结点组组成的数字相加)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bina ...

  9. xss实例-输出在<script></script>之间的情况

    1. 我们找到这么一个点,也是输入和输出都未过滤的一个点.相比教程第一例,其特殊之处在于,是输出在了 <script>[输出]</script>之间. http://activ ...

随机推荐

  1. (翻译).NET应用架构

    .NET应用架构 Kalyan Bandarupalli著,hystar翻译 这个系列文章将帮助.NET开发人员与架构师使用最新的.NET技术设计高效的.NET应用.关于应用架构这方面虽然已有很多文章 ...

  2. 访问器 & 修改器

    访问器 model /** * 定义一个访问器 当 Eloquent 尝试获取 title 的值时,将会自动调用此访问器(查詢時自動調用) * @author jackie <2019.02.1 ...

  3. springboot对oracle的配置

    spring.jpa.database=oracle spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver sprin ...

  4. django 多线程下载图片

    example1: from multiprocessing.dummy import Pool as ThreadPool #多线程 import time import urllib2 urls ...

  5. ijkplayer之.so文件编译过程

    本文转载:ijkplayer编译so库真没那么难: 1.如何使用ijkplayer 官方:https://github.com/Bilibili/ijkplayer build.gradle添加下述依 ...

  6. Linux上启动Cron任务

    cron是一个Linux下的定时执行工具,无需人工干预,与quartz上的cron表达式稍有不同.由于cron是Linux上的内置基础服务,并不是所有服务器都是默认启动该服务的,如果没有启动可以使用下 ...

  7. IDEA2016 maven项目配置Junit

    添加插件:File->Settings->Plugins 设置生成模式:File->Settings->Other Settings 修改模板:File->Setting ...

  8. 1、根"/"目录结构

    1.目录结构 FSH [root@localhost /]# tree -L . ├── bin -> usr/bin #普通用户使用的命令 ├── boot #存放系统启动相关文件,例如ker ...

  9. WordPress版微信小程序2.4版发布

    自从发布2017年9月16日WordPress版微信小程序2.2.8版本后,这个一个多月来,WordPress版微信小程序,在经过一些比较小的更新后,今天发布阶段性的版本:2.4版 .这版本主要是功能 ...

  10. python中建模分析零息票收益率曲线--复利和连续复利

    收益率曲线(Yield Curve)是显示一组货币和信贷风险均相同,但期限不同的债券或其他金融工具收益率的图表.纵轴代表收益率,横轴则是距离到期的时间.在此用python建模分析零息票收益率曲线,输出 ...