题目描述:
给定一个整数 n, 返回从 1 到 n 的字典顺序。
例如,给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。
请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。
代码如下:
class Solution {
public List<Integer> lexicalOrder(int n) {
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 1; i <= n; i++) {
map.put(i, String.valueOf(i));
}
List<Map.Entry<Integer, String>> list = new ArrayList<>(map.entrySet());
list.sort(new Comparator<Map.Entry<Integer, String>>() {
@Override
public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
List<Integer> arrayList = new ArrayList<>();
for (var entry : list) {
arrayList.add(entry.getKey());
}
return arrayList;
}
}
class Solution {
public List<Integer> lexicalOrder(int n) {
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 1; i <= n; i++) {
map.put(i, String.valueOf(i));
}
List<Map.Entry<Integer, String>> list = new ArrayList<>(map.entrySet());
list.sort((o1, o2) -> o1.getValue().compareTo(o2.getValue()));
List<Integer> arrayList = new ArrayList<>();
for (var entry : list) {
arrayList.add(entry.getKey());
}
return arrayList;
}
}
执行结果: