与えられた数値を持つ最小文字列


これは一連のleetcode解決説明の一部です.あなたがこの解決法が好きであるか、それが役に立つとわかるならば、このポストと同様に/または上告my solution post on Leetcode's forumsをしてください.

Leetcode Problem #1663 (Medium): Smallest String With A Given Numeric Value
説明
小文字の数値はアルファベットの位置(1−添字)として定義されるので、Aの数値は1、Bの数値は2、Cの数値は3である.
小文字からなる文字列の数値は、文字の数値の合計として定義されます.例えば、文字列「阿部」の数値は1 + 2 + 5 = 8に等しい.
あなたは2つの整数nとkを与えられます.
xが辞書順でyの前に来るならば、ストリングxは字句的に文字列yより小さいです、すなわち、xがyの接頭辞であるか、私がx [ i ] !=のような最初の位置であるならば、注意してくださいそして、y [ i ]はアルファベット順になる.
例:
例1 :
入力
N = 3、K = 27
出力:
「ああ」
解説
文字列の数値は1 + 1 + 25 = 27で、この値と長さが3の最小文字列です.
例2 :
入力
N = 5、K = 73
出力:
"aaszz "
制約
  • 1 <= n <= 105
  • N <= k <= 26 * n
  • 考え
    基本的な考え方は簡単です:文字列を辞書式の“小さな”としてできるようにするためには、できるだけ多くの“重み”の文字列の後方に移動したい.
    それはあなたが答えの最後に多くの“Z”として、多くの“A”として答えを開始することができます.これは、“a”または“z”でない文字が1つだけであることを意味します.
    最初に、あなたが完了したとき、「A」で残りのスペースを満たすためにあなた自身「部屋」を残すために、KからNを取り除いてください.これは、あなたが最初に「A」で各々の位置を満たすためにKのN値を費やしているかのようです.その後、各文字は、“A”以上のどれくらいの増加によって考慮されるでしょう、したがって、「Z」は25の値を持っています.また、偶然にも0 - indexedされたアルファベット参照文字列で簡単にものを作ります.
    その後、多くの“Z”としては、Kに収まるように開始し、中間文字の任意の残りのkを使用します.そして、“A”でANSのスタートを埋めます.
    C++コード:
    class Solution {
        public:
            string getSmallestString(int n, int k) {
                k -= n;
                string alpha = "_bcdefghijklmnopqrstuvwxy_";
                string ans = std::string(~~(k / 25), 'z');
                if (k % 25) {
                    ans = alpha[k % 25] + ans;
                }
                return std::string(n - ans.size(), 'a') + ans;
            }
        };
    
    Pythonコード:
    class Solution(object):
        def getSmallestString(self, n, k):
            k -= n
            alpha = '_bcdefghijklmnopqrstuvwxy_'
            ans = 'z' * (k // 25)
            if k % 25:
                ans = alpha[k % 25] + ans
            return 'a' * (n - len(ans)) + ans
    
    JavaScriptコード
    var getSmallestString = function(n, k) {
        k -= n
        let alpha ='_bcdefghijklmnopqrstuvwxy_',
            ans = 'z'.repeat(~~(k / 25))
        if (k % 25) ans = alpha[k % 25] + ans
        return ans.padStart(n, 'a')
    };