Lexicographical Numbers

2017-05-11  本文已影响35人  我叫胆小我喜欢小心

题目来源
将1-n整型数字以字典序排序。
我想着先转换为string,然后排序,然后再转为int,代码如下:

class Solution {
public:
    vector<int> lexicalOrder(int n) {
        vector<string> resString(n, "");
        for (int i=1; i<=n; i++)
            resString[i-1] = to_string(i);
        sort(resString.begin(), resString.end());
        vector<int> res;
        for (auto item : resString)
            res.push_back(atoi(item.c_str()));
        return res;
    }
};

然后结果不出意料的超时了。然后我想着是不是可以用排序算法,不过自己来设定排序规则。
看了下讨论区,就是不断的找下一个元素,代码如下:

class Solution {
public:
    vector<int> lexicalOrder(int n) {
        vector<int> res;
        if (n < 1)
            return res;
        int cur = 1;
        res.push_back(cur);
        for (int i=1; i<n; i++) {
            if (cur * 10 <= n)
                cur = cur * 10;
            else if (cur % 10 != 9 && cur + 1 <= n)
                cur++;
            else {
                //这里注意一下,假如n=13,那么当cur=13的时候,下一个应该是2。
                while ((cur / 10) % 10 == 9) 
                    cur /= 10;
                cur = cur / 10 + 1;
            }
            res.push_back(cur);
        }
        return res;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读