leetcode 386. 字典序排数

题目描述:

给定一个整数 n, 返回从 1 到 n 的字典顺序。

例如,

给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。

请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。


解法:

class Solution {
public:
    vector<int> lexicalOrder(int n) {
        vector<int> res;
        if(n <= 0){
            return {};
        }else{
            int val = 1;
            int left = n;
            while(left){
                while(left && val <= n){
                    res.push_back(val);
                    // cout<<n - left<<": "<<val<<endl;
                    left--;
                    if(val*10 <= n){
                        val*= 10;
                    }else{
                        val++;
                        while(val%10 == 0){
                            val /= 10;
                        }
                    }
                }
                val /= 10;
                val++;
                while(val%10 == 0){
                    val /= 10;
                }
            }
            return res;
        }
    }
};
posted @ 2019-07-14 12:01  zhanzq1  阅读(168)  评论(0编辑  收藏  举报