0
点赞
收藏
分享

微信扫一扫

LeetCode 1663. 具有给定数值的最小字符串


​​1663. 具有给定数值的最小字符串​​

小写字符数值 是它在字母表中的位置(从 ​​1​​​ 开始),因此 ​​a​​​ 的数值为 ​​1​​​ ,​​b​​​ 的数值为 ​​2​​​ ,​​c​​​ 的数值为 ​​3​​ ,以此类推。

字符串由若干小写字符组成,字符串的数值 为各字符的数值之和。例如,字符串 ​​"abe"​​​ 的数值等于 ​​1 + 2 + 5 = 8​​ 。

给你两个整数 ​​n​​​ 和 ​​k​​ 。返回 长度 等于 ​​n​​ 且 数值 等于 ​​k​​ 的 字典序最小 的字符串。

注意,如果字符串 ​​x​​​ 在字典排序中位于 ​​y​​​ 之前,就认为 ​​x​​​ 字典序比 ​​y​​ 小,有以下两种情况:

  • ​x​​​ 是 ​​y​​ 的一个前缀;
  • 如果 ​​i​​​ 是 ​​x[i] != y[i]​​​ 的第一个位置,且 ​​x[i]​​​ 在字母表中的位置比 ​​y[i]​​ 靠前。

示例 1:

输入:n = 3, k = 27
输出:"aay"
解释:字符串的数值为 1 + 1 + 25 = 27,它是数值满足要求且长度等于 3 字典序最小的字符串。

示例 2:

输入:n = 5, k = 73
输出:"aaszz"

提示:

  • ​1 <= n <= 105​
  • ​n <= k <= 26 * n​

二、方法一

贪心算法。先从头开始取得满足条件的最小的字母,然后依次取剩下的字母

class Solution {
public String getSmallestString(int n, int k) {
StringBuilder sb = new StringBuilder();
for (int i = n; i >= 1; i--) {
int bound = k - 26 * (i - 1);
if (bound > 0) {
sb.append((char)( bound + 'a' - 1));
k -= bound;
} else {
sb.append('a');
k -= 1;
}
}
return sb.toString();
}
}

复杂度分析

  • 时间复杂度:O(n)。
  • 空间复杂度:O(n)。


举报

相关推荐

0 条评论