Processing math: 100%

Leetcode 1663 - Smallest String With A Given Numeric Value

題目

Problem#

題目給你兩個數字 nk 問你: 由 n 個字母組成,所有字母加起來總和為 k 且字串字典序最小
a=1, b=2, …, z=26

想法#

最優的答案是後面都是 z 前面都是 a,先貪心找最後的 z 長度: 對於字串 Z = aa...z = 1*(a長度) + 26 假如 k 大於 Z 的話,則最後一定可以擺一個 z,亦即 k >= 1*(n-1) + 26
接下來就都擺 a ,中間的字母(夾在 az 中間 e.g. “aa…x…zz”),就擺 'a'+(k-1)

  • 時間複雜度: O(n)
  • 空間複雜度: O(n)

AC Code#

Copy
class Solution
{
public:
string getSmallestString(int n, int k)
{
string fr, mi, ba;
while(k >= 1*(n-1)+26)
{
ba += 'z';
k -= 26;
n--;
}
while(n > 1)
{
fr += 'a';
k--;
n--;
}
if(k > 0)
mi += 'a' + (k-1);
// cout << fr << mi << ba << '\n';
return fr + mi + ba;
}
};
view raw 1663.cpp delivered with ❤ by emgithub

賞析#