K-th Smallest in Lexicographical Order

題目來源
給兩個數(shù)字n和k,求按字母序排列的第k個數(shù)字。

Given integers n and k, find the lexicographically k-th smallest integer in the range from 1 to n.

然后我又棄療了,看了答案,就是這么一個過程,先算一下cur和cur+1之間的距離,距離要是大于k的話,那么把cur10就可以,因為cur10肯定是下一個。
如果小于k的話,那么直接把cur+1,然后計算下cur和cur+1之間距離是多少。
計算cur和cur+1之間的距離的話,就是不斷的把n1和n2乘10,然后判斷當(dāng)前層有多少個數(shù)字,假如是滿的,那么就是n2-n1,如果不是滿的,那么就是n+1-n1。
具體可以看看討論區(qū)的解釋。

class Solution {
public:
    int findKthNumber(int n, int k) {
        int cur = 1;
        k--;
        while (k > 0) {
            int steps = calSteps(n, cur, cur + 1);
            if (k >= steps) {
                k -= steps;
                cur = cur + 1;
            }
            else {
                cur *= 10;
                k--;
            }
        }
        return cur;
    }
    
    int calSteps(int n, long long n1, long long n2)
    {
        int steps = 0;
        while (n1 <= n) {
            steps += static_cast<int>(min(n+1LL, n2) - n1);
            n1 *= 10;
            n2 *= 10;
        }
        return steps;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容