首页 > 试题广场 >

字典序第K小

[编程题]字典序第K小
  • 热度指数:382 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定正整数 n 和 k ,请你找出 [1,n] 内的字典序第 k 小的数。

数据范围:
示例1

输入

5,5

输出

5
示例2

输入

50,4

输出

12

说明

字典序的排列是 [1,10,11,12,13...] 
public int findKth (int n, int k) {
        // write code here
        int cur = 1;
        k--;
        while(k > 0){
            int steps = getSteps(cur,n);
            if(steps <= k){
                k -= steps;
                cur++;
            }else{
                cur = cur*10;
                k--;
            }
        }
        return cur;
    }
    private int getSteps(int cur, long n){
        int step = 0;
        long first = cur;
        long last = cur;
        while(first <= n){
            step += Math.min(last,n)-first+1;
            first = first*10;
            last = last*10+9;
        }
        return step;
    }

发表于 2022-08-31 11:01:05 回复(0)

问题信息

难度:
1条回答 958浏览

热门推荐

通过挑战的用户

查看代码