1. LeetCode386题目链接链接
https://leetcode.com/problems/lexicographical-numbers/
2. 结题思路
该题主要是实现输入n,用一个数组保存从1到n,但是需要实现字典序排数,可以从左往右依次插入数字,如果很大,就会变成[1,10,100,1000...2,20,200,2000...],这样我们可以看出一个规律,如果n足够大的话,是这样的排序,我们可以将下一位与n对比,然后未超过就加入数组中,超过就再次循环依次加一,然后在进行上述过程。需要注意的是9和加一成为最后一位。
public List<Integer> lexicalOrder(int n) {
List<Integer> list = new ArrayList<>(n);
int curr = 1;
for (int i = 1; i <= n; i++) {
list.add(curr);
if (curr * 10 <= n) {
curr *= 10;
} else if (curr % 10 != 9 && curr + 1 <= n) {
curr++;
}else {
while ((curr / 10) % 10 == 9) {
curr /= 10;
}
curr = curr / 10 + 1;
}
}
return list;
}