[LeetCode] Lexicographical Numbers

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的字典序输出。
思路1:使用stl函数sort,更改比较函数,输出即可。由于输入数字较大,导致超时。
class Solution {
public:
    static bool cmp(const int& a, const int& b)
    {
        string s1 = to_string(a);
        string s2 = to_string(b);
        return s1 < s2;
    }
    vector<int> lexicalOrder(int n) {
        vector<int> res;
        for (int i = 1; i <= n; ++i)
            res.push_back(i);
        sort(res.begin(), res.end(), cmp);
        return res;
    }
};
TLE

思路2:根据数字的特征值。

举个栗子:13

1-10-11-12-13

2

3

4

5

6

7

8

9

外循环1-9.内函数递归增加0-9进行计算,如果当前值超过了n,则直接返回,如果当前值不超过n,则放入结果数组res中。

class Solution {
public:
    vector<int> lexicalOrder(int n) {
        vector<int> res;
        for (int i = 1; i < 10; ++i)
            find_next(i, n, res);
        return res;
    }
    
    void find_next(int i, int n, vector<int>& res)
    {
        if (i > n)
            return;
        res.push_back(i);
        for (int j = 0; j < 10; ++j)
            find_next(i*10+j, n, res);
    }
};

思路3:Python sorted函数。

class Solution:
    def lexicalOrder(self, n):
        """
        :type n: int
        :rtype: List[int]
        """
        return sorted(range(1, n+1), key=lambda x : str(x))

 

转载于:https://www.cnblogs.com/immjc/p/9504111.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值