![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
Detect-er
这个作者很懒,什么都没留下…
展开
-
8.10 leetcode
129. 求根到叶子节点数字之和麻烦的解法是用回溯+递归,但我发现自己写不出来。其实不需要回溯的数组记录每条路径上的值,每次把 i 从上往下传递,i * 10 + root.val 就是当前层算出来的值,把它继续传给下一层,直到叶子结点。 public int sumNumbers(TreeNode root) { return helper(root, 0); } public int helper(TreeNode root, int i){原创 2021-08-10 10:03:09 · 60 阅读 · 0 评论 -
8.9 leetcode
148. 排序链表此题为三个知识点的合并:快慢指针找到链表中间节点(876. 链表的中间结点)合并两个有序链表(21. 合并两个有序链表)右递归和非递归两种写法归并排序1、快慢指针的关键点:参考题解讨论以下两种while条件的区别结点个数为奇数,slow都是指向中间结点,为偶数,slow有差异while fast and fast.next: slow最后停在中间两个的右边那个while fast.next and fast.next.next: slow最后停在中间两个的左边那原创 2021-08-10 01:59:34 · 79 阅读 · 0 评论 -
8.4 leetcode
56. 合并区间给二维数组按照第一个值排序 Arrays.sort(intervals, Comparator.comparingInt(o -> o[0])把第一个小区间加入结果集resfor 所有的interval: if 当前interval的左 > res最后一个区间的右: 当前interval加入res else: 修改res最后一个区间的右,**一定要选两个区间右边界最大的那个值**res.toArray(new int[res.size()][])...原创 2021-08-05 00:29:31 · 61 阅读 · 0 评论 -
8.3 leetcode
47. 全排列 II首先是用dfs回溯,用used决定每一层可以选择的路径因为要剪枝,所以先给数组升序然后是剪枝,剪枝的条件:当前值和上一个值相等,说明这个地方开头的结果已经判断过上一个值不在使用中,即used为false。这个条件很关键,因为满足条件1,还有一种可能,就是比如1,1’,2,选中了1,然后进入下一层是可选择 1 ’ 的,因为此时 1 正在使用中,所以可以正常操作。条件1的情况是,上一个 1 刚刚撤销,然后到下一个 1’ ,此时 1 不在使用中,所以剪枝了。res全局变量nu原创 2021-08-04 13:32:45 · 65 阅读 · 0 评论 -
8.1 leetcode
19. 删除链表的倒数第 N 个结点判断只有1个结点的特殊情况p,q指向headfor q移动n次if q为空: 说明删除的是首结点,返回head.nextwhile q.next!=null: p和q后移while结束时,p移到了删除节点的上一个删除p的下一个结点上面的思路中,p和q是从head开始的,所以会出现当删除倒数第 len 个节点时(意味着首节点),q此时为空,还得单独特殊判断。所以,让p和q从dummyHead开始。p,q,start指向dummyHeadq移动n次原创 2021-08-02 00:07:18 · 90 阅读 · 1 评论 -
7.30 leetcode
69. x的平方根x==0 返回0循环从1到x/2: 取l和r的mid(向下),这样左区间[l,m],右区间[m+1,r] x/mid <= mid 左 else 右原创 2021-07-31 16:49:28 · 59 阅读 · 0 评论 -
7.29 leetcode
题解反转m到np和q,分别移到m-1和m的位置循环n-m次:把q后面的删掉删掉的塞到p后面最长递增子序列从前到后遍历nums:if nums[cur] > nums[i]:dp[cur] = Math.max(dp[cur],dp[i]+1)max = Math.max(max,dp[cur])(剑指)倒数第k节点p和q,都从head开始q先走k步q!=null:p和q前进二叉树右视图bfs和dfs两种解法,其中bfs的写法类似层序遍历,dfs从右往左原创 2021-07-30 20:08:59 · 80 阅读 · 0 评论