leetcode 1663.具有给定数值的最小字符串 | 刷题打卡

609 阅读1分钟

题目链接

贪心算法

思路

需要找字典序最小的字符串,根据贪心的思路,我就贪最小的,先把长度为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('');
};