题目来源
将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;
}
};
网友评论