![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode题解
在LeetCode刷题过程中的一些记录。
Yesica1230
这个作者很懒,什么都没留下…
展开
-
LeetCode题解:下一个数
下一个数下一个数。给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。略小的数,将第一个不位于尾部的1向低位移,并将尾部的连续1向高位移,也就是从低位向高位找到第一次出现的10,互换位置,并且将该位置右侧的1都移至高位11001110111010001111100111011100111100略大的数,将第一个不位于尾部的0置为1,右侧第一个1置为0,并将后续的1都移至低位,也就是从低位向高位找到第一次出现的01,互换位置,并且将该位置右侧的原创 2021-10-26 21:51:12 · 200 阅读 · 0 评论 -
LeetCode题解:求和路径
求和路径给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。遍历二叉树的节点当作根节点查找路径/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *原创 2021-10-26 15:45:48 · 88 阅读 · 0 评论 -
LeetCode题解:检查子树
检查子树检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。方法一:序列化前序遍历,在遇到null节点时字符串添加空格,这样可唯一地确定一颗树,确定s2是否是s1的字串即可/** * Definition for a binary tree node. * public cl原创 2021-10-26 14:26:05 · 155 阅读 · 0 评论 -
LeetCode题解:首个共同祖先
首个共同祖先设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。两个节点在树中的位置有两种情况:两个节点都在其中某个节点为根的子树中两个节点分别在第一个共同祖先的左右子树中从底向上进行遍历,设置boolean值 left 和 right,left 表示当前root的左子树是否包含节点 p 或 q,right 表示右子树是否包含节点 p 或 q:left 和 right 均为true ,为情况2,当前原创 2021-10-26 13:37:54 · 222 阅读 · 0 评论 -
LeetCode题解:递归乘法
递归乘法递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。方法一:乘法转加法A*B 可转化为 B 个 A相加,为了减少加法的运算,选择较大的数进行相加,例如:9 * 3 = 9 + 9 * 2 = 9 + 9 + 9 * 1class Solution { public int multiply(int A, int B) { int temp; if (A < B){原创 2021-10-20 11:39:27 · 686 阅读 · 0 评论 -
LeetCode题解:不同路径
不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wVEpyDne-1633835154084)(C:\Users\日华\AppData\Roaming\Typora\typora-user-images\image-20211010105239484.原创 2021-10-10 11:06:18 · 60 阅读 · 0 评论 -
LeetCode题解:最小差
最小差给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差。首先对两个数组进行排序,利用双指针计算差值class Solution { public int smallestDifference(int[] a, int[] b) { Arrays.sort(a); Arrays.sort(b); int i = 0; int j = 0; long min = Lo原创 2021-10-10 11:08:20 · 327 阅读 · 0 评论 -
LeetCode题解:一次编辑
一次编辑字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。首先比较两个字符串长度,如果长度相差大于1,直接返回false。定义两个指针分别遍历两个字符串,定义count记录可编辑的次数最多为1。当遍历到的字符不相等时count减1,count < 0时返回false,同时判断两个字符串是否相等,相等则继续遍历,不相等时,将较短字符串的索引向前移一位,即跳过长字符串中不相等的字符,继续比较。class S原创 2021-10-10 11:08:34 · 279 阅读 · 0 评论 -
LeetCode题解:幂集
幂集幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。说明:解集不能包含重复的子集。方法一:逐步添加{a,b}为{a,b,c}的子集,对于新增的元素c,可在{a,b}的所有子集中加上c,由此可获得 {a,b,c}的所有子集。class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res = new原创 2021-10-09 16:38:09 · 199 阅读 · 0 评论 -
LeetCode题解:迷路的机器人
迷路的机器人设想有个机器人坐在一个网格的左上角,网格 r 行 c 列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径。网格中的障碍物和空位置分别用 1 和 0 来表示。返回一条可行的路径,路径由经过的网格的行号和列号组成。左上角为 0 行 0 列。如果没有可行的路径,返回空数组。class Solution { public List<List<Integer>> pathWithObstacles原创 2021-10-09 16:37:29 · 250 阅读 · 0 评论 -
LeetCode题解:括号
括号括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。说明:解集不能包含重复的子集。画一棵2*n高的满二叉树,列出所有的组合添加限制条件进行筛选,")" 不能大于"(" 数量,且分别不能大于n,满足左右括号数量相等且刚好为n时加入list中每次分支遍历结束后要回溯class Solution { private List<String> ans; public List<String> generateParenthesis(i原创 2021-10-09 15:49:08 · 79 阅读 · 0 评论 -
LeetCode题解:井字游戏
井字游戏设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" “)中。第一个玩家总是放字符"O”,且第二个玩家总是放字符"X"。"X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。当所有位置非空时,也算为游戏结束。如果游戏结束,玩家不允许再放置字符。原创 2021-10-09 15:48:27 · 778 阅读 · 0 评论 -
LeetCode题解:节点间通路
节点间通路节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。为了比较有环进入死循环,定义boolean数组标记路径已走过逆序查找,从目标点开始查找到开始点的路径class Solution { private boolean[] visited; public boolean findWhetherExistsPath(int n, int[][] graph, int start, int target) { visited = new b原创 2021-10-09 15:47:21 · 259 阅读 · 0 评论 -
LeetCode题解:交换数字
交换数字编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。方法一:加法class Solution { public int[] swapNumbers(int[] numbers) { numbers[0] += numbers[1]; numbers[1] = numbers[0] - numbers[1]; numbers[0] = numbers[0] - numbers[1]; retur原创 2021-10-09 15:39:26 · 87 阅读 · 0 评论 -
LeetCode题解:环路检测
环路检测给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。若环不存在,请返回 null。方法一:使用哈希表使用表记录遍历过的节点,当遇到之前的节点时则为环路的开头节点。public class Solution { public ListNode detectCycle(ListNode head) { ListNode pos = head; Set<ListNode> set = new HashSet<ListNode&g原创 2021-10-09 15:37:22 · 194 阅读 · 0 评论 -
LeetCode题解:合法二叉搜索树验证
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-10-09 15:32:48 · 87 阅读 · 0 评论 -
LeetCode题解:绘制直线
绘制直线绘制直线。有个单色屏幕存储在一个一维数组中,使得32个连续像素可以存放在一个 int 里。屏幕宽度为w,且w可被32整除(即一个 int 不会分布在两行上),屏幕高度可由数组长度及屏幕宽度推算得出。请实现一个函数,绘制从点(x1, y)到点(x2, y)的水平线。给出数组的长度 length,宽度 w(以比特为单位)、直线开始位置 x1(比特为单位)、直线结束位置 x2(比特为单位)、直线所在行数 y。返回绘制过后的数组。该题主要在于理解题意,length指总共有多少个int,w/32指一行有原创 2021-10-09 15:38:36 · 141 阅读 · 0 评论