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使用google开源工具Thumbnailator实现图片压缩
    nginx基本配置
    CopyPropertis
    微服务(Microservices )简介
    jQuery ajax()使用serialize()提交form数据
    $.getJSON( )的使用方法简介
    理解 CSS 的 z-index 属性
    JS中的call()和apply()方法
    CSS文字换行详细解说
    如何实现JS函数的重载
  • 原文地址:https://www.cnblogs.com/immjc/p/9504111.html
Copyright © 2011-2022 走看看