码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Lexicographical Numbers

时间:2017-12-31 03:26:12      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:ref   while   size   graphic   arraylist   res   span   情况下   pre   

原题链接在这里: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.

题解:

从cur=1开始加入res中,下个数有三种情况:

第一种, cur*10 <= n, 就把cur 乘以 10.

第二种, cur 末位不是9 并且 cur+1<=n的情况下, cur++.

第三种, 末位已经等于9, 或者cur现在增加到n, 此时把cur调整到前一位不为9的level.

Time Complexity: O(n). Space: O(1).

AC Java: 

 1 class Solution {
 2     public List<Integer> lexicalOrder(int n) {
 3         List<Integer> res = new ArrayList<Integer>();
 4         int cur = 1;
 5         for(int i = 0; i<n; i++){
 6             res.add(cur);
 7             if(cur*10 <= n){
 8                 cur *= 10;
 9             }else if(cur%10!=9 && cur<n){
10                 cur++;
11             }else{
12                 while((cur/10)%10 == 9){
13                     cur /= 10;
14                 }
15                 cur = cur/10+1;
16             }
17         }
18         return res;
19     }
20 }

 

LeetCode Lexicographical Numbers

标签:ref   while   size   graphic   arraylist   res   span   情况下   pre   

原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/8151766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!