C ++中按字典顺序最小的第K个
假设我们有两个值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-步骤
(增加curr1)
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
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短