贪心算法
思路
需要找字典序最小的字符串,根据贪心的思路,我就贪最小的,先把长度为n的所有字符都用a填充,然后从后往前替换a,能换z就换z不能就换比他小的字符,直到和为k为止,保证a的数量越多越好。
代码
function getSmallestString(n: number, k: number): string {
let arr = new Array(n).fill('a'); // 初始化字符串数组,全部用'a'填充
// 从后往前填充,替换'a'
while (n > 0) {
// 能填'z'就填'z'
if (k - 26 > n - 1) {
arr[n - 1] = 'z';
k -= 26;
} else if (k > n) {
// 填能填最大的
const dicIndex = k - n;
arr[n - 1] = String.fromCharCode('a'.charCodeAt(0) + dicIndex);
k -= dicIndex + 1;
} else {
break;
}
// 继续向前找字符替换'a'
n--;
}
return arr.join('');
};