https://leetcode.com/problems/lexicographical-numbers/ public class Solution { public List<Integer> lexicalOrder(int n) { List<Integer> ret = new ArrayList<Integer>(); int cur = 1; ret.add(cur); while (cur > 0) { if (cur * 10 <= n) { cur *= 10; ret.add(cur); continue; } while (cur % 10 == 9) { cur /= 10; } if (cur == 0) { break; } if (cur + 1 <= n) { cur++; ret.add(cur); } else { cur /= 10; while (cur % 10 == 9) { cur /= 10; } if (cur == 0) { break; } cur++; ret.add(cur); } } return ret; } }