17电话号码的字母组合_39组合总和

17题目链接

const keyMap: any = {
    '2': 'abc',
    '3': 'def',
    '4': 'ghi',
    '5': 'jkl',
    '6': 'mno',
    '7': 'pqrs',
    '8': 'tuv',
    '9': 'wxyz',
}

function letterCombinations(digits: string): string[] {
    const result: string[] = [];
    const backtrackingLetter = (digits: string, curPath: string, startIndex: number) => {
        if (curPath?.length === digits?.length) {
            const newPath = curPath;
            if (!newPath.length) return;
            result.push(newPath);
        }
        if (startIndex >= digits.length) return;
        const letters = keyMap[digits[startIndex]];
        for(let j=0;j<letters.length;j++) {
            curPath += letters[j];
            backtrackingLetter(digits, curPath, startIndex+1);
            curPath = curPath.slice(0, curPath.length-1);
        };
    }
    backtrackingLetter(digits, "", 0);
    return result;
};

console.log(letterCombinations(""));
console.log(letterCombinations("2"));
console.log(letterCombinations("23"));

39链接

const sum = (arr: number[]) => arr.reduce((pres, cur)=> {
    return pres + cur;
},0);

function combinationSum(candidates: number[], target: number): number[][] {
    const result: number[][] = [];
    const backtrackingSum = (candidates: number[], target: number, curPath: number[], start: number) => {
        if (sum(curPath) === target) {
            const newPath = [...curPath];
            result.push(newPath);
            return;
        }
        if (sum(curPath) > target) {
            return;
        }
        for(let i = start; i<candidates.length; i+=1) {
            curPath.push(candidates[i]);
            backtrackingSum(candidates, target, curPath, i);
            curPath.pop();
        }
    }
    backtrackingSum(candidates, target, [], 0);
    return result;
};


console.log(combinationSum([2,3,6,7],7));
console.log(combinationSum([2,3,5],8));
console.log(combinationSum([2],1));

results matching ""

    No results matching ""