leetcode 440. 字典序的第K小数字【字典树】

题解参考

注意会数据溢出,特判或者采用long long

#define debug(x) cout<<#x<<": "<<(x)<<endl;
using ll = long long;
class Solution {
public:

    int findKthNumber(ll n, ll k) {
        auto findp = [&]( ll p){
            ll ne = p+1;
            ll ret=0;
            while( p<=n){
                ret += min(n+1,ne) - p;
                p*=10;
                ne*=10;
            }
            return ret;
        };
        
        ll cur = 1;
        ll cnt = 1;
        
        while(true){
            
            if(cnt == k){
                break;
            }
            ll t = findp(cur);
            if(cnt + t > k ){
                int ch = findp(cur*10);
                cnt += 1;
                cur*=10;
            }
            else{
                cur++;
                cnt += t;
            }
        }
        return cur;
    }
};

在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页