• [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))
  • 相关阅读:
    XML
    编码格式
    CSS 实现加载动画之七-彩环旋转
    CSS 实现加载动画之六-大风车
    CSS 实现加载动画之五-光盘旋转
    CSS 实现加载动画之四-圆点旋转
    CSS 实现加载动画之三-钢琴按键
    CSS 实现加载动画之二-圆环旋转
    CSS 实现加载动画之一-菊花旋转
    JS案例之8——从一个数组中随机取数
  • 原文地址:https://www.cnblogs.com/immjc/p/9504111.html
Copyright © 2020-2023  润新知