题目主要来源:LeetCode。主要选自剑指offer、程序员面试宝典。
每日尽可能保持 N+1 道题,N 取 0 到 9。部分解法是从LeetCode上大佬们的解法中拿过来的,如有侵权,告知立删
文章目录
0x01 剑指 Offer 14- II. 剪绳子 II
/**
* JZ14 对结果取余,尽量分为等量的3
*
* @author Anjude
* @date 2021/7/11 9:45
*/
public class JZ14 {
public int cuttingRope(int n) {
if (n <= 3) return n - 1;
int b = n % 3, p = 1000000007;
long res = 1;
while (n > 4) {
res *= 3;
res = res % 1000000007;
n -= 3;
}
return (int) (res * n % 1000000007);
}
}
0x02 剑指 Offer 25. 合并两个排序的链表
/**
* JZ25 遍历合并即可
*
* @author Anjude
* @date 2021/7/11 17:34
*/
public class JZ25 {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null || l2 == null) return l1 == null ? l2 : l1;
ListNode pre = new ListNode();
ListNode curHead = pre;
while (l1 != null && l2 != null) {
if (l1.val > l2.val) {
curHead.next = l2;
l2 = l2.next;
} else {
curHead.next = l1;
l1 = l1.next;
}
curHead = curHead.next;
}
curHead.next = l1 == null ? l2 : l1;
return pre.next;
}
}
0x03 剑指 Offer 26. 树的子结构
/**
* JZ26 TODO
*
* @author Anjude
* @date 2021/7/11 17:55
*/
public class JZ26 {
public boolean isSubStructure(TreeNode A, TreeNode B) {
if (A == null || B == null) return false;
return dfs(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
}
private boolean dfs(TreeNode a, TreeNode b) {
if (b == null) return true;
if (a == null) return false;
return a.val == b.val && dfs(a.left, b.left) && dfs(a.right, b.right);
}
}
本文详细解析了LeetCode中的几道剑指Offer难题,包括剪绳子II、合并两个排序的链表以及树的子结构问题。通过作者Anjude的解法,展示了如何高效地解决这些问题。对于剪绳子II,重点在于找到最优的切割策略;合并两个排序的链表则利用遍历比较节点值进行合并;而对于树的子结构,采用深度优先搜索策略判断子树是否存在。

1968

被折叠的 条评论
为什么被折叠?



