1. 程式人生 > 其它 >440. 字典序的第K小數字

440. 字典序的第K小數字

給定整數n和k,找到1到n中字典序第k小的數字。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

class Solution {

    private long getNodes(long prefix, int n) {
        long nextPrefix = prefix + 1;
        long ret = 0;
        while (prefix <= n) {
            ret += Math.min(n - prefix + 1, nextPrefix - prefix);
            prefix *= 10;
            nextPrefix *= 10;
        }
        return ret;
    }

    public int findKthNumber(int n, int k) {
        long prefix = 1;

        while (k != 1) {
            long nodes = getNodes(prefix, n);
            if (nodes >= k) {
                prefix *= 10;
                k--;
            } else {
                prefix += 1;
                k -= nodes;
            }
        }

        return (int) prefix;
    }

}
心之所向,素履以往 生如逆旅,一葦以航