zoukankan      html  css  js  c++  java
  • 386. Lexicographical Numbers

    Problem:

    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.

    思路

    Solution (C++):

    vector<int> lexicalOrder(int n) {
        vector<int> res;
        helper(1, n, res);
        return res;
    }
    void helper(int target, int n, vector<int>& res) {
        if (target > n)  return;
        res.push_back(target);
        helper(target*10, n, res);
        if (target % 10 != 9)  helper(target+1, n, res);
    }
    

    性能

    Runtime: 68 ms  Memory Usage: 9.8 MB

    思路

    Solution (C++):

    vector<int> lexicalOrder(int n) {
        vector<int> res(n, 0);
        int cur = 1;
        for (int i = 0; i < n; ++i) {
            res[i] = cur;
            if (cur * 10 <= n)  cur *= 10;
            else {
                if (cur >= n)  cur /= 10;
                ++cur;
                while (cur%10 == 0)  cur /= 10;
            }
        }
        return res;
    }
    

    性能

    Runtime: 60 ms  Memory Usage: 8.7 MB

    相关链接如下:

    知乎:littledy

    欢迎关注个人微信公众号:小邓杂谈,扫描下方二维码即可

    作者:littledy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    一些想说的事
    化学离子平衡作业偷懒神器
    solution
    SGU 刷题记
    INT128
    # 字典树的指针写法 1.
    CSP-S2 游记
    Tarjan 【整理】
    HGOI 20191106
    20191101
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12665293.html
Copyright © 2011-2022 走看看