与えられた数値を持つ最小文字列
7282 ワード
これは一連の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++コード:
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 "
制約
基本的な考え方は簡単です:文字列を辞書式の“小さな”としてできるようにするためには、できるだけ多くの“重み”の文字列の後方に移動したい.
それはあなたが答えの最後に多くの“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')
};
Reference
この問題について(与えられた数値を持つ最小文字列), 我々は、より多くの情報をここで見つけました https://dev.to/seanpgallivan/solution-smallest-string-with-a-given-numeric-value-26khテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol