34.二叉树中和为某一值的路径
// 时间复杂度和空间复杂度都好高
var pathSum = function(root, target) {
let res = [];
let arr = [];
helper(res, arr, root, target);
return res;
};
var helper = (res, arr, root, target)=>{
if(root==null){
//不能在这里判断target为0,因为到了叶子节点是左右两边都为Null的
return;
}
arr.push(root.val);
let tmp1 = arr.slice(0);
let tmp2 = arr.slice(0);
if(root.left==null&&root.right==null&&target==root.val){
res.push(tmp1);
return;
}
helper(res, tmp1, root.left, target-root.val);
helper(res, tmp2, root.right, target-root.val);
}
13.机器人的运动范围
//和12题非常相似的一题。我实在是受不了我总是把while写成if了。
//另外需要注意fill后面不能直接跟new Array,这样每一个元素的数组都是一样的,不是独立的一个。
//千万不要忘了map....
var movingCount = function (m, n, k) {
if (m == 0 || n == 0) {
return 0;
}
let store = new Array(m).fill(true).map(item => new Array(n).fill(true))
var helper = (i, j) => {
let tmp = 0;
let a = i;
let b = j;
while (a) {
tmp += a % 10;
a = Math.floor(a / 10);
}
while (b) {
tmp += b % 10;
b = Math.floor(b / 10);
}
if (tmp > k || i >= m || j >= n || store[i][j] == false) {
return 0;
}
store[i][j] = false;
return 1 + helper(i + 1, j) + helper(i, j + 1);
//上面一行改成res++和两次helper也可以。
}
return helper(0, 0);
};