假设我们有两个值n和k。在字典上,我们必须找到第k个最小的整数,范围是1到n。因此,如果输入像n = 14且k = 3,则输出将为11,因为序列将为[1、10、11、12、13、14、2、3、4、5、6、7 ,8,9],则第k个数字为11。
为了解决这个问题,我们将遵循以下步骤-
定义一个函数findKthNumber()
,它将花费n,k,
curr:= 1
(将k减1)
当k不为零时,执行-
curr:= curr * 10
k:= k-1
k:= k-步骤
(增加curr 1)
steps:=调用函数calcSteps(n,curr,curr + 1)
如果步数<= k,则-
除此以外
返现
定义一个函数calcSteps()
,它将使用nax,n1,n2,
ret:= 0
当n1 <= nax时,-
ret:= ret +纳克斯最小值+ 1和n2 – n1
n1:= n1 * 10
n2:= n2 * 10
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution { public: int findKthNumber(int n, int k) { int curr = 1; k--; while(k){ int steps = calcSteps(n, curr, curr + 1); if(steps <= k){ k -= steps; curr++; }else{ curr *= 10; k -= 1; } } return curr; } int calcSteps(lli nax, lli n1, lli n2){ int ret = 0; while(n1 <= nax){ ret += min(nax + 1, n2) - n1; n1 *= 10; n2 *= 10; } return ret; } }; main(){ Solution ob; cout << (ob.findKthNumber(14,3)); }
14,3
输出结果
11