剑指offer
吾同木
这个作者很懒,什么都没留下…
展开
-
按之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { LinkedList<TreeNode> q = new LinkedList<>(); ArrayList<ArrayList<Integer>原创 2021-05-15 22:31:52 · 65 阅读 · 0 评论 -
把二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { ArrayLis原创 2021-05-15 22:04:40 · 72 阅读 · 0 评论 -
剪绳子
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 输入描述: 输入一个数n,意义见题面。(2 <= n <= 60) private static int cutRope(int target) { int a = 0;原创 2021-05-15 20:59:47 · 78 阅读 · 0 评论 -
二叉树的下一个节点
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。 public static TreeLinkNode GetNext(TreeLinkNode pNode) { if(pNode == null){ return null; } if(pNode.right != null){ // 查找 pNode.right 中原创 2021-05-12 19:50:32 · 75 阅读 · 0 评论 -
构建乘积数组
给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];) 对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。 import java.util.ArrayList; public class Solution { pub原创 2021-05-10 21:38:25 · 73 阅读 · 0 评论 -
正则表达式匹配
请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配 import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * *原创 2021-05-10 20:58:16 · 212 阅读 · 0 评论 -
二叉搜索树第K个节点
给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。 /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { int count = 0; TreeNode no原创 2021-05-09 01:06:45 · 139 阅读 · 0 评论 -
链表中环的入口节点
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { List原创 2021-05-07 08:07:29 · 82 阅读 · 0 评论 -
对称二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 boolean isSymmetrical(TreeNode pRoot) { if(pRoot == null) { return true; } } boolean dfs(TreeNode left, TreeNode right){ if(left == null && right原创 2021-05-06 22:37:33 · 80 阅读 · 0 评论 -
平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 public class Solution { boolean isBalanced = true; public boolean IsBalanced_Solution(TreeNode root) {原创 2021-05-05 20:47:15 · 72 阅读 · 0 评论 -
数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007(归并排序) public class Solution { int [] nums, tmp; public int InversePairs(int [] array) { this.nums = array; tmp = new int[nums.leng原创 2021-05-05 18:14:25 · 84 阅读 · 0 评论 -
丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 public int GetUglyNumber_Solution(int n){ if(n< 6){ return n; } // 用3个数分别记录当前2、3、5最多的个数 int n2 = 0; int n3 =原创 2021-05-05 17:29:46 · 85 阅读 · 0 评论 -
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 public String PrintMinNumber(int [] numbers) { for(int i = 0; i< numbers.length; i++){ for(int j = i + 1; j< numbers.length ; j++){原创 2021-05-05 16:55:10 · 59 阅读 · 0 评论 -
字符串排列问题
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 import java.util.*; public class Main{ private static HashSet hashSet = new HashSet(); private static ArrayList arrayList = new ArrayList(); publi原创 2021-05-05 13:57:48 · 72 阅读 · 0 评论 -
整数中1出现的次数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数 例如,1~13中包含1的数字有1、10、11、12、13因此共出现6次 public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count = 0; for (int i = 1; i <= n ; i*= 10){ int high = n / (i * 10);原创 2021-05-03 16:24:26 · 107 阅读 · 0 评论 -
复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) public RandomListNode Clone(RandomListNode pHead) { if(pHead == null){ return null; } RandomListNode r原创 2021-05-03 17:19:16 · 53 阅读 · 0 评论 -
二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { Tre原创 2021-05-05 13:19:56 · 52 阅读 · 0 评论