![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
递归
傅里叶不想变换_
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 55 - II. 平衡二叉树
思路:写一个函数treeDepth来返回树的高度 class Solution { public boolean isBalanced(TreeNode root) { if (root == null) return true; int leftTreeDepth = treeDepth(root.left); int rightTreeDepth = treeDepth(root.right); if (Math.abs(ri.原创 2021-01-27 15:50:24 · 102 阅读 · 2 评论 -
剑指 Offer 38. 字符串的排列
思路:递归+回溯 public class Solution { public String[] permutation(String s) { int len = s.length(); if (len == 0) return new String[0]; // 转换成字符数组是常见的做法 char[] charArray = s.toCharArray(); // 排序是为了去重方便 Arra.原创 2021-01-24 15:07:03 · 66 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
思路:递归,DFS或者BFS层次遍历 递归版本 class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } else { // 左子树高度 int leftHeight = maxDepth(root.left); // 右子树高度 int r.原创 2021-01-21 10:52:03 · 105 阅读 · 6 评论 -
剑指 Offer 18. 删除链表的结点
思路: 1.双指针prev,cur,当 cur.val == val 时,执行 prev.next = curr.next 删除结点 2.递归函数public ListNode deleteNode(ListNode head, int val)表示删除链表中值等于val的结点 终止条件 1.当head等于空的时候,直接返回head,因为一个空的链表我们是没法删除的,if (head == null) return head; 2.如果head结点不等于空,并且head结点的值.原创 2021-01-11 10:19:51 · 75 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
思路: 1.栈是先进后出,可以不断压栈,最后依次弹出即可。注意for循环中不能用stack.size(),因为栈在弹出过程中size会变化。 2.递归 递推阶段: 每次传入 head.next ,以 head == null(即走过链表尾部节点)为递归终止条件,此时直接返回。 回溯阶段: 层层回溯时,将当前节点值加入列表,即tmp.add(head.val)。 最终,将列表 tmp 转化为数组 res ,并返回即可。 以链表1 -> 2 为例,画的递归示意图。 public.原创 2021-01-11 09:36:28 · 43 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
思路:双指针,引入哨兵节点ListNode dum = new ListNode(0), cur = dum;,最后返回dum.next 注意点:如果两个链表的长度不同,跳出循环后,有了l1 == null || l2 == null,将较长的链表挂在cur后面即可,也就是cur.next = l1 != null ? l1 : l2; /** * Definition for singly-linked list. * public class ListNode { * int val; .原创 2021-01-10 14:38:12 · 65 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
思路:双指针,curr表示当前指针,prev表示当前指针的下一个指针。 反转:curr.next = prev 移动位置:注意要先移动cur,再移动prev /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { pub.原创 2021-01-10 13:17:57 · 63 阅读 · 0 评论 -
Leetcode 70. 爬楼梯
思路:用 f(x) 表示爬到第 x 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以可以列出如下式子:f(x) = f(x - 1) + f(x - 2),即斐波那契数列。 斐波那契数列的方式:递归和动态规划 class Solution { // 递归 public int climbStairs1(int n) { if (n <= 2) return n; return climbStairs1(n-.原创 2020-12-27 16:37:56 · 76 阅读 · 0 评论