Leetcode 386:字典序排数

题目描述

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

例如,

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

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

解题思路

class Solution {
public:
    static bool cmp(int a,int b){
        string sa = to_string(a);
        string sb = to_string(b);
        int i = 0,la = sa.length(),lb = sb.length();
        while(i<la && i<lb){
            if(sa[i] == sb[i]) i++;
            else if(sa[i] < sb[i]) return true;
            else return false;
        }
        if(i>=la) return true;
        return false;
    }
    vector<int> lexicalOrder(int n) {
        vector<int> ans;
        for(int i=1;i<=n;i++) ans.push_back(i);
        sort(ans.begin(),ans.end(),cmp);
        return ans;
    }
};

DFS:

class Solution {
public:
    void dfs(int start,int &idx,int n,vector<int>& ans){
        ans[idx++] = start;
        for(int i=0;i<=9;i++){
            if(start*10+i <= n) dfs(start*10+i,idx,n,ans);
        }
    }
    vector<int> lexicalOrder(int n) {
        vector<int> ans(n);
        int idx = 0;
        for(int i=1;i<=9;i++){
            if(i <= n) dfs(i,idx,n,ans);
        }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_35338624/article/details/90082898