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

标签(空格分隔): LeetCode

作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.me/


题目地址:https://leetcode.com/problems/lexicographical-numbers/description/

题目描述:

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.

题目大意

给了一个数字n,找出1~n的所有数字的字典序排列。

解题方法

题目中说了输入可能是5百万,那么只能用O(N)的时间复杂度。

这个题的思路我是参考的Lexicographical Numbers 字典顺序的数字,不太好想。

  1. 如果curr乘以10小于等于n,那么下个数字应该是curr末尾补0;
  2. 如果curr已经到达了n,那么说明各位数字已经到头了,应该变化十位数字了,所以除以10,再加一。这时可能会出现恰好进位的情况,而字典序可能是从末尾没有0的数字开始的,所以要把末尾的0去掉。

比如n=300时,会有这个队列1,10,100,101,102...198,199,2,20,200,201...299,3,30,300

代码如下:

class Solution:
def lexicalOrder(self, n):
"""
:type n: int
:rtype: List[int]
"""
cur = 1
ans = []
for i in range(n):
ans.append(cur)
if cur * 10 <= n:
cur *= 10
else:
if cur >= n:
cur //= 10
cur += 1
while cur % 10 == 0:
cur //= 10
return ans

日期

2018 年 8 月 17 日 ———— 别人七夕,我在刷题。。

最新文章

  1. odoo8.0 win7 64位 安装配置(补遗)
  2. [Node.js] 使用TypeScript编写Node项目
  3. Beta版本贡献比
  4. UVA 1351 十三 String Compression
  5. JavaWeb学习总结(十四)--Apache的DBUtils
  6. Eclipse Class Decompiler---Java反编译插件
  7. Authorized users only. All activity may be monitored and reported.
  8. linux防火墙 基础知识
  9. C#使用DataSet类、DataTable类、DataRow类、OleDbConnection类、OleDbDataAdapter类编写简单数据库应用
  10. Android笔记 之 旋转木马的音乐效果
  11. foreach 循环的应用传值
  12. (转)Unity3D中移动物体位置的几种方法
  13. posix,perl正则表达式区别
  14. rethinking imageNet pre-training
  15. MFC原理第五讲.消息映射.以及如何添加消息
  16. 向SQL Server中导入Excel的数据
  17. Oracle12c版本中未归档隐藏参数
  18. scala-02-数组的操作
  19. ORA-02291: 违反完整约束条件 - 未找到父项关键字
  20. java线程五种状态

热门文章

  1. 爬虫动态渲染页面爬取之Splash的介绍和使用
  2. 如何利用官方SDK文件来辅助开发
  3. 08 eclipse配置JDK
  4. 5分钟6步强制删除kubernetes NameSpace小技巧
  5. 巩固javaweb第十八天
  6. acute
  7. promise.all的应用场景举例
  8. Oracle中常用的系统函数
  9. 【编程思想】【设计模式】【基础模式Fundamental】delegation_pattern
  10. Linux基础命令---uptime