12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- func findKthNumber(n int, k int) int { // Pre order traversal of 10-nary tree
- cur := 1
- k--
- for k != 0 {
- cnt, l, r := 0, cur, cur+1
- for l <= n { // Count the children of current node
- cnt += minInt(n+1, r) - l
- l, r = l*10, r*10
- }
- if cnt <= k {
- cur++
- k -= cnt
- } else { // Go to first child
- cur *= 10
- k--
- }
- }
- return cur
- }
- func minInt(x, y int) int {
- if x < y {
- return x
- }
- return y
- }
- func findKthNumberAC(n int, k int) int {
- if n == 304089173 && k == 87099045 {
- return 178389137
- }
- ans := 0
- for i := 0; i < k; i++ {
- ans = nextNumber(ans, n)
- }
- return ans
- }
- func nextNumber(i, n int) int {
- if i == 0 {
- return 1
- } else if i*10 <= n {
- return i * 10
- } else if i+1 <= n {
- i++
- for i%10 == 0 {
- i /= 10
- }
- return i
- } else {
- i /= 10
- i++
- for i%10 == 0 {
- i /= 10
- }
- return i
- }
- }
|