440. 字典序的第K小数字
字典序的第K小数字
题目描述:
给定整数 n 和 k,返回 [1, n] 中字典序第 k 小的数字。
示例 1:
输入: n = 13, k = 2
输出: 10
解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。
示例 2:
输入: n = 1, k = 1
输出: 1
提示:
1 <= k <= n <= 109
思路:
时间复杂度:O(),空间复杂度O(1)
从1到9依次计算,就是得到以1为开始数字,计算出以1开头的数字的个数,如果k比这个大就k-=cnt,如果不大就i*10开始依次计算。
代码:
func count(n ,cur int)int{
l,r := cur,cur
cnt := 0
for l <= n{
cnt += min(n, r)-l+1
l *= 10
r = r*10 +9
}
return cnt
}
func findKthNumber(n int, k int) int {
i :=1
k--
for k>0{
cnt := count(n, i)
if cnt <=k{
i++
k -= cnt
}else{
i *= 10
k--
}
}
return i
}
func min(a,b int)int{
if a<b{
return a
}
return b
}
代码效率:
执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:1.9 MB, 在所有 Go 提交中击败了46.43%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!