386. Lexicographical Numbers 输出1到n之间按lexico排列的数字序列
[抄题]:
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就行了
[一句话思路]:
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:

[一刷]:
- 可用于递归的数字记录为cur, 从1开始
[二刷]:
- 同一个dfs中的n和i是不变的。i变化时return换i, cur变化时return换cur。(在谁的主场return就换谁)
[三刷]:
- dfs写得不熟悉啊:先添加,再进行下一步扩展,而且dfs中要写传递的公式
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
不懂哪里错,究其原因还是对dfs不熟悉
[总结]:
[复杂度]:Time complexity: O() Space complexity: O(n)
[算法思想:迭代/递归/分治/贪心]:
[关键模板化代码]:
public void dfs(int cur, int n, List<Integer> result) {
//exit when cur > n
if (cur > n) return;
//add the cur
result.add(cur);
//i loop from 0-9, go further dfs
for (int i = 0; i <= 9; i++) {
//exceed when new number > n
if (10 * cur + i > n)
return ;
dfs(10 * cur + i, n, result);
}
}
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
[潜台词] :
class Solution {
public List<Integer> lexicalOrder(int n) {
//initialization
List<Integer> result = new ArrayList<Integer>();
//corner case
if (n <= 0) return result;
//for loop for cur
for (int cur = 1; cur <= 9; cur++) {
dfs(cur, n, result);
}
//return
return result;
}
public void dfs(int cur, int n, List<Integer> result) {
//exit when cur > n
if (cur > n) return;
//add the cur
result.add(cur);
//i loop from 0-9, go further dfs
for (int i = 0; i <= 9; i++) {
//exceed when new number > n
if (10 * cur + i > n)
return ;
dfs(10 * cur + i, n, result);
}
}
}
386. Lexicographical Numbers 输出1到n之间按lexico排列的数字序列的更多相关文章
- 【LeetCode】386. Lexicographical Numbers 解题报告(Python)
[LeetCode]386. Lexicographical Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...
- LeetCode - 386. Lexicographical Numbers
Given an integer n, return 1 - n in lexicographical order. For example, given 13, return: [1,10,11,1 ...
- 386. Lexicographical Numbers
用DFS来做,先弄开头是1的,再弄开头是1的里面开头是1的,再开头是1的里面开头是1的里的开头是1的,再... 是吧-- 比N大了BREAK就行. 注意第一个循环是1-9,往后的循环是0-9. pub ...
- 386. Lexicographical Numbers 把1--n按字典序排序
https://leetcode.com/problems/lexicographical-numbers/description/ 前20个是 1, 10, 11, 12, 13, 14, .... ...
- 386 Lexicographical Numbers 字典序排数
给定一个整数 n, 返回从 1 到 n 的字典顺序.例如,给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] .请尽可能的优化算法的时间复杂度和空间复杂度. 输入 ...
- Java初学者作业——编写Java程序,输出1~100之间能够同时被3和4整除的最大的五个数字。
返回本章节 返回作业目录 需求说明: 编写Java程序,输出1-100之间能够同时被3和4整除的最大的五个数字. 实现思路: 声明变量count,用于存储满足条件的数据个数,设置初始值为0. 在区间1 ...
- 输出2到n之间的全部素数
本题要求输出2到n之间的全部素数,每行输出10个.素数就是只能被1和自身整除的正整数.注意:1不是素数,2是素数. 输入格式: 输入在一行中给出一个长整型范围内的整数. 输出格式: 输出素数,每个数占 ...
- 【LeetCode-面试算法经典-Java实现】【129-Sum Root to Leaf Numbers(全部根到叶子结点组组成的数字相加)】
[129-Sum Root to Leaf Numbers(全部根到叶子结点组组成的数字相加)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bina ...
- xss实例-输出在<script></script>之间的情况
1. 我们找到这么一个点,也是输入和输出都未过滤的一个点.相比教程第一例,其特殊之处在于,是输出在了 <script>[输出]</script>之间. http://activ ...
随机推荐
- html总结2
(1)选择器: 1.标签选择器:用于修饰同类HTML标签的共性风格 <style type="text/css"> li{ color:red; font-size:2 ...
- prettier-eslint 与 prettier-eslint-cli 区别
prettier-eslint 与 prettier-eslint-cli 区别: prettier-eslint 只能处理字符串 prettier-eslint-cli 能处理一个或多个文件 默认情 ...
- 如何在myeclipse中实现jquery的自动提示功能
在web开发过程中,myeclipse中jsp可以实现自动提示功能,但是jquery代码却无法实现自动提示,需要自己一个个手动去输入,效率过低,怎么办? 工具/原料 jquery 1.8.3.js ...
- sql job定时备份数据库
---------------------------------------- 对TestDB1进行备份 ---------------------------------------- decla ...
- CRM 2016 Get IOrganizationService
得到域认证下的IOrganizationService private IOrganizationService GetOrgService() { Uri orgServiceUri = new U ...
- 搭建zookeeper伪分布式集群
伪分布式集群的意思就是在同一台机子上部署多个zookeeoer,但是他们的端口不一样. 1.安装zookeeper 到/usr/local 2.cd /usr/local/zookeeper 3.cd ...
- mysql 5.7 修改字符编码
在my.ini文件中添加 [mysqld]character-set-server = utf8 [client]default-character-set = utf8
- Oracle 循环查询
select * from sys_department start with departmentid = '0303e461-2454-4d5a-bfea-2cd5a4c064c6' connec ...
- React将某段文字插入到某个元素里
最基本使用: 引入依赖文件: <script src="https://unpkg.com/react@16/umd/react.development.js">< ...
- charles 注册码
感谢@那时纯真 提供的注册码.Windows和Mac通用. 软件去官网下载安装即可. Registered Name:https://zhile.io License Key: 48891cf209c ...