剑指-65 不用加减乘除做加法
思路加法器原理//进位 本位1 + 0 = 01 进位 0 本位 1 1 + 1 = 10 进位 1 本位 0 0 + 0 = 00 进位 0 本位 0 0 + 1 = 01 进位 0 本位 1 只有 1 1 的情况会产生进位,即 & 操作可以获取进位只有 1 0 的情况会产生本位为1 ,其
思路加法器原理//进位 本位1 + 0 = 01 进位 0 本位 1 1 + 1 = 10 进位 1 本位 0 0 + 0 = 00 进位 0 本位 0 0 + 1 = 01 进位 0 本位 1 只有 1 1 的情况会产生进位,即 & 操作可以获取进位只有 1 0 的情况会产生本位为1 ,其
思路后序遍历|左子树|右子树|根节点|二叉搜索树的定义是左子树 < 根节点 < 右子树 (或者左子树 > 根节点 > 右子树)因此可以递归判断是否符合二叉搜索树定义数组边界为left right,根元素为root = array[right]从left进行遍历,一直到arra
这里了解一下快速幂的概念:幂计算的时候可以通过二分每次计算指数为一半的情况,例如// 偶数情况 x^n = x^(n/2) * x^(n/2)2^64 = 2^32 * 2^ 322^32 = 2^16 * 2^162^16 = 2^8 * 2^82^8 = 2^4 * 2^42^4 = 2^2 *
思路先序遍历:根左右 中序遍历:左根右 后序遍历:左右根根据前序和中序构建树并返回根节点。前序的数组preOrder特点是元素遵循 |根元素|左子树|右子树|;中序的数组inOrder特点为元素遵循 |左子树|根元素|右子树|,因此可以递归以下步骤来构建子树范围 left > right 时返
思路很朴素的想法,最小的数字一定首位最小,所以会想到进行排序,但是跟一般的数字排序有些差别,这里的排序条件是根据字符串拼接后的数值比较得出的,如果pre1 + pre2 的字符串 > pre2 + pre1 ,说明pre1 和 pre2需要进行交换。这个递推关系是有两个条件所有数的可能中,每个
思路大小王可以当任意数字使用顺子中的牌不能有重复数组中的最大值和最小值差值不能 > 5(一共就五张牌)只要满足以上3个条件即可构成顺子这里有个小疑问,不知道打牌规则里的 13 ,1,2,3,4 能不能构成顺子?🤔️class Solution { public boolean isSt
思路二叉搜索树本身包含了元素的排序,左子树的元素 <= 根节点 <= 右子树因为是从根结点到叶子结点的路径之和与指定值k进行对比遍历二叉树,当遍历到叶子结点的时候,判断从根路径到叶子结点的路径和是否和k相等,如果相等则添加该路径路径使用动态数组来存放,每当回退节点的时候去掉最后一个元素值
思路主要思路是遍历格子,然后确保格子之间是联通的。这里有个条件,就是需要格子的位置的数位之和要小于k,也就是只有在该位置是可达变量(即从0,0到该位置可联通)且数位之和小于k的时候才可以算做可通过的格子(存在两个条件)class Solution { public int movingCoun
思路找到字符串头节点字符,然后使用栈保存后续的每个节点每个节点的查找方向有三个(来的方向需要去除),依次递归便利这三个方向,查看是否能找到完整字符串class Solution { // 通过栈保存元素遍历顺序 Stack<Word> stack = new Stack();
思路1链A的每个节点都遍历一遍链B,时间复杂度最高思路2链A的每个节点都存入map,然后遍历链B,如果map中存在则代表找到相同节点/** * Definition for singly-linked list. * public class ListNode { * int val; *