Given two integers n and k, return thekthlexicographically smallest integer in the range[1, n].
Example 1:
**Input:** n = 13, k = 2
**Output:** 10
**Explanation:** The lexicographical order is [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9], so the second smallest number is 10.
Example 2:
**Input:** n = 1, k = 1
**Output:** 1
Constraints:
1 <= k <= n <= 109
ac
classSolution {publicintfindKthNumber(int n,int k) {int curr =1; k--;while (k >0) {int tmp =calStep(n,curr, curr+1);if (tmp <= k) { k -= tmp; curr++; } else { k -=1; curr *=10; } }return curr; }publicintcalStep(int n,int curr,int nxt) {int res =0;while (curr <= n) { res +=Math.min(n+1, nxt) - curr; curr *=10; nxt *=10; }return res; }}/*1) tree with 10-nodes; 2) current value is 1, move (k-1) steps, curr will locate at the k-th smallest position, return it; 3) calculate steps between 2 adjacent nodes: calStep(), while curr <= n keep adding and curr *= 10
*/