题目如下:
The numeric value of a lowercase character is defined as its position
(1-indexed)
in the alphabet, so the numeric value ofa
is1
, the numeric value ofb
is2
, the numeric value ofc
is3
, and so on.The numeric value of a string consisting of lowercase characters is defined as the sum of its characters' numeric values. For example, the numeric value of the string
"abe"
is equal to1 + 2 + 5 = 8
.You are given two integers
n
andk
. Return the lexicographically smallest string with length equal ton
and numeric value equal tok
.Note that a string
x
is lexicographically smaller than stringy
ifx
comes beforey
in dictionary order, that is, eitherx
is a prefix ofy
, or ifi
is the first position such thatx[i] != y[i]
, thenx[i]
comes beforey[i]
in alphabetic order.Example 1:
Input: n = 3, k = 27 Output: "aay" Explanation: The numeric value of the string is 1 + 1 + 25 = 27, and it is the smallest string with such a value and length equal to 3.Example 2:
Input: n = 5, k = 73 Output: "aaszz"Constraints:
1 <= n <= 105
n <= k <= 26 * n
解题思路:贪心算法, 每一位先用a尝试,如果剩余部分全部用z的话所组成的和扔小于k,接下来尝试b,c....只能找出满足条件的值为止。
代码如下:
class Solution(object): def getSmallestString(self, n, k): """ :type n: int :type k: int :rtype: str """ res = '' alphabet = [''] + [chr(i) for i in range(97,123)] while n > 0: if (n - 1) * 26 >= k: res += 'a' k -= 1 else: val = k - (n - 1) * 26 res += alphabet[val] k -= val n -= 1 return res