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

83 阅读1分钟

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

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

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

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

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

方法一:模拟
让字符串前面的字符尽可能小,大的字符尽可能放到后面,将k消耗完毕

func getSmallestString(n int, k int) string {
    str := make([]byte, n)
    for i := range str {
        str[i] = 'a'
    }
    k = k - n 
    for i := n - 1; i >= 0 && k > 0; i -- {
        if k >= 25 {
            str[i] = str[i] + byte(25)
            k = k - 25
        } else {
            str[i] = str[i] + byte(k)
            k = 0
        }
    }
    return string(str)
}