1 | 小写字符 的 数值 是它在字母表中的位置(从 1 开始),因此 a 的数值为 1 ,b 的数值为 2 ,c 的数值为 3 ,以此类推。 |
这个题目的主要意思是实现使用n个数凑出k这个值,n个数的取值范围是[1,26],选择每个数字时,数字应该尽量小。
贪心算法
- 如果剩余的 $n$ 的数量大于 $k/26+1$(向上取整),那么说明有 $n-(k/26+1)$个数字的选择是受限制的,可以任意选择,那么直接就选择 $1$,选择的字符也就是 $a$
- 如果剩余的 $n$的数量不大于 $k/26+1$(向上取整), 那么说明剩余数字的选择是受限制的。此时先从剩余的 $n$ 中选择第一个,为了保证选择的数字是最小的,第一个被选择的数字应该是 $k-((n-1)*26)$,接下来每一个数字都按照 2 这种选择方法选择
需要注意的是 $a$ 是 $1$,所以在计算时,需要处理边界条件
1 | class Solution { |
时间复杂度$O(n)$,空间复杂度$O(n)$