zoukankan      html  css  js  c++  java
  • [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))
  • 相关阅读:
    继承(JAVA)
    第一个Java应用
    Java面向对象编程
    学生管理系统(分层开发)
    ComboBox的数据联动
    二进制、八进制、十进制、十六进制之间的转换
    C# using的一些事
    JVM最多支持多少个线程?
    Java日志体系居然这么复杂?——架构篇
    java 架构之路(队列)kafka
  • 原文地址:https://www.cnblogs.com/immjc/p/9504111.html
Copyright © 2011-2022 走看看