-
216. 组合总和 III
【思路】相比于上一道求组和的题,多了一个判断条件:和,所以要在判断 k 的时候加上判断和是否相等。var combinationSum3 = function(k, n) { let path = [], res = [], sum = 0; const backtracking = (k, n, startIndex) => { if (sum > n) return; if (path.length === k) { if (sum === n) { res.push([...path]); return; } } for (let i = startIndex; i <= 9 - (k - path.length) + 1; i++) { sum += i; path.push(i); backtracking(k, n, i + 1); sum -= i; path.pop(); } } backtracking(k, n, 1); return res; };
-
17. 电话号码的字母组合
【思路】这道题比组合题简单的地方在于,确定了每一层循环的个数,即一个按键上的字母,所以不用记录每次递归的开始位置,但是要记录遍历到第几个按键。
【气愤】每次题是写会了,但是类型没处理明白,push 进去的是单个字母组成的数组,最后返回结果要一个字符串,要记得把每个 path 数组类型转换为数组(用join
)!var letterCombinations = function(digits) { if (!digits) return []; const map = ["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]; let path = [], res = []; const backtracking = (digits, index) => { if (index === digits.length) { res.push(path.join('')); // 还是没想到用 join return; } let str = digits[index]; for (const i of map[str]) { path.push(i); backtracking(digits, index + 1); path.pop(); } } backtracking(digits, 0); return res; };
leetcode 刷题 log day 25
最新推荐文章于 2024-07-22 16:27:42 发布