每日一结
面试题13. 机器人的运动范围
(i + 1) % 10 == 0 ? si - 8 : si + 1
当当前数字加 1,对 10 求余为 0,时,其数位和为当前数字的数位和 - 8;
否则等于当前数字 + 1;
传参当前位置的坐标, 横坐标的数位值, 纵坐标的数位值;
因为此题可以单只向下和向右探索;
越界 || 当前位置已经访问过 || 不满足数位和要求 return 0;
所以在可行的情况下,1 + 向下 + 向右即可;
剑指 Offer 63. 股票的最大利润
ans[0][0] = 0;//不持有
ans[0][1] = -prices[0];//持有
for(int i = 1; i < prices.length; i++) {
ans[i][0] = Math.max(ans[i - 1][0], ans[i - 1][1] + prices[i]);
ans[i][1] = Math.max(ans[i - 1][1], -prices[i]);
}
return ans[prices.length - 1][0];
剑指 Offer 60. n个骰子的点数
首先初始化第一个筛子的各种点数的概率;
再for循环for(int i = 2; i <= n ; i++);
接下来可以开始第二颗色子的建立了,其长度为 颗数 * 5 + 1;
接下来,要对色子的概率进行移动性分配;
因为骰子的点数只有六个,也就只有这六个点数的移动有意义;
for(int j = 0; j < ans.length; j++) {
for(int k = 0; k < 6; k++) {
t[j + k] += ans[j] / 6.0;
}
}
可理解为,在一个长 5 * i + 1长度的数组上,有一个长度为6 的窗口一格一格的在其上面滑动,并和当前位置上的数值累加;
剑指 Offer 26. 树的子结构
思路:
当前位置相等否 ->,大树的右子树 || 大树的左子树;
判断当前位置是否相等;
大树 == null return false;
小树 == null return true;
之后判断,dnn(a.left, b.left) && dnn(a.right, b.right);//&&
剑指 Offer 27. 二叉树的镜像
if(root == null) {
return null;
}
TreeNode t = root.left;
root.left = mirrorTree(root.right);
root.right = mirrorTree(t);
return root;
直接调用本函数;
剑指 Offer 28. 对称的二叉树
满足对称二叉树,则他的左子树.left == 右子树.right && 左子树.right == 右子树.left
初始化:
左子树 == null && 右子树 == null return true;
左子树 == null || 右子树 == null  || 左子树.val != 右子树.val return true;
剑指 Offer 12. 矩阵中的路径
注意上下左右四个方向,一成即可;
设置的访问过的点 board[i][j] = '\0';
在之后的回溯时,需要讲其变回原样:board[i][j] = words[k];//回溯
传参,当前char的坐标,以及匹配到的字串的长度(位置);
初始化:
如果坐标越界 || 当前位置的char != 匹配的位置的char return false;
当匹配的子串的长度等于目标串的长度时【k == words.length - 1】 return true;
 
                    
                 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号