题目
思路
这道题要求答案的字典序最小,一个朴素的想法是前面尽量填a,那么那么前面究竟最多可以填入几个a呢?答案是保证在填了a以后,空余的位全部填z加和之后仍然能满足题目要求。所以可以通过循环找到对应位置,这里我是用数学表达式取代了循环。找到要填多少个a以后用k减掉相当数量的a,剩下的数如果小于等于26,则填入对应代表的字母即可。否则在字符串末尾尽量填z,最后剩下的数再用对应的字符填充。
代码:
class Solution:
def getSmallestString(self, n: int, k: int) -> str:
temp=0
ans=''
if k==n:
for i in range(n):
ans=ans+'a'
return ans
elif k==26*n:
for i in range(n):
ans=ans+'z'
return ans
# for i in range(1,n+1):
# if 26*(n-i)<=k-i:
# temp=i-1
# break
temp=(26*n-k)//25 #这里是通过上述循环得到的表达式
print(temp)
for i in range(temp):
ans=ans+'a'
k-=temp
if k<=26: #如果剩下的数小于等于26,则再添加一个即可
ans=ans+chr(k-1+ord('a'))
return ans
cur=k//26
now=k%26
if now:
ans=ans+chr(now-1+ord('a'))
for i in range(cur):
ans=ans+'z'
return ans