![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer-java
all-is-well
这个作者很懒,什么都没留下…
展开
-
剑指offer-20:顺时针打印矩阵
思路因为是自己想的笨办法,所以代码不优雅哈 1. 设置变量cur表示每次移动方向,初始化为1,每次与4取余表示方向; 2. 在每个方向遍历过程中注意横纵坐标边界与cur之间的变化; 3. 循环终止条件为集合res保存个数等于总个数。代码 public ArrayList<Integer> printMatrix(int [][] matrix) { int row = matri原创 2017-04-08 17:45:05 · 340 阅读 · 0 评论 -
剑指offer-16:反转链表
非递归方法public ListNode ReverseList(ListNode head) { // q,当前指针; // p,当前指针的前一个节点 // cur,保存当前指针下一个节点,中间变量 ListNode p = null, q = head, cur = head; if(head == null || h原创 2017-04-01 15:29:36 · 368 阅读 · 0 评论 -
剑指offer-25 二叉树中和为某一值的路径
思考判断路径肯定使用深度遍历;遍历到一个叶结点后需要返回上一父节点;因此在函数的最后应该将末尾元素删除;保存结果方式,不可能在函数中定义容器,因此可以将结果作为函数参数,在函数递归过程中依次更新数据。(类似mergeSort中将整理的数组传递给新建的空间数组,最后再遍历更新原来的数组)代码public static ArrayList<ArrayList<Integer>> FindPath原创 2017-04-03 10:47:53 · 322 阅读 · 0 评论 -
剑指offer-树的子结构
分析大体思路如下: 判断当前节点与查询节点的val是否相等,若相等,则去检查两者的左右子树;反之return false;在程序递归过程中,记得注意递归的出口以及空指针的处理;主程序中在root1&root2非空的条件下才能去判断;判断judge函数中,一些边界出口为if(root2 == null) return true;if(root1 == null) return false原创 2017-04-01 14:22:11 · 289 阅读 · 0 评论 -
剑指offer-判断树是否对称
分析若根节点为空,返回TRUE;不为空,判断左右两颗子树是否对称,即左子树的左孩子==右子树的右孩子 && 左子树的右孩子==右子树的左孩子。递归判断函数中,注意递归出口。代码public class Solution { boolean isSymmetrical(TreeNode pRoot) { if(pRoot == null) return true原创 2017-04-01 14:39:12 · 398 阅读 · 0 评论 -
剑指offer-57:删除链表中重复节点
思路需要新建一个头指针header, prev = header; nHead = pHead,以防链表第一个元素重复;遍历链表当前值与next指针的值,若相同则循环直至不同,令prev.next指向当前指针的下一个;反之若值不相同,prev.next指向该值,更新prev;判断结束后,nHead = nHead.next代码public ListNode deleteDuplicatio原创 2017-04-18 09:24:20 · 392 阅读 · 0 评论 -
剑指offer-47:不用加减乘除做加法
代码public int Add(int num1,int num2) { int sum = 0, carry = 0; // 1. 使用异或运算表示各个位加和后的结果; // 2. 根据计算结果发现,只有1,1进位,于是求与运算且左进一位; // 3. 更新num1, num2,直到num2为0 // 4. 返回num原创 2017-04-18 10:41:29 · 358 阅读 · 0 评论