Lexicographical Numbers
Medium
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.
题意
给定整数n,返回字典序的[1, n]之间整数的数组
思路
递归
代码
class Solution {
private void recuAdd(int base, int n, ArrayList<Integer> ans) {
int cur = base;
for (int i=0; i<=9; ++i) {
cur = base + i;
if (cur <= n) {
ans.add(cur);
if (cur * 10 <= n) {
recuAdd(cur * 10, n, ans);
}
}
}
}
public List<Integer> lexicalOrder(int n) {
ArrayList<Integer> ans = new ArrayList<Integer>();
int i = 0, j = 0, cur = 0;
for (i=1; i<=9; ++i) {
cur = i;
if (cur <= n) {
ans.add(cur);
if (cur * 10 <= n) {
recuAdd(cur * 10, n, ans);
}
}
}
return ans;
}
}