LeetCode Lexicographical Numbers

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

 

posted @ 2017-12-31 00:41  Dylan_Java_NYC  阅读(185)  评论(0编辑  收藏  举报