
剑指Offer
木良Duncan
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 46. 把数字翻译成字符串
题目:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。本题采用动态规划解决。状态转移方程:如果当前位置与前一位置组成数字大于0小于26 dp[i] = dp[i-2]+dp[i-1];否则dp[i] = dp[i-1]public int translateNum(int num) { String s原创 2021-10-23 10:45:42 · 59 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。方法一:定义一个长度为n的数组result,长度从0开始。遍历nums数组,result[nums[i]] = 1。然后遍历result数组,当result[i] = 0,即i为缺失的数字。public int missingNumber(int[] nums) { int[] result = new int[n原创 2021-10-21 08:37:20 · 157 阅读 · 1 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。本题同样采用辅助队列进行层序遍历,方法和剑指 Offer 32 - II. 从上到下打印二叉树 II相同,输出方式稍有不同。每一层遍历结束后,如何是偶数层,就逆向从右往左保存结果。public List<List<Integer>> levelOrder(TreeNode root) { List<Lis原创 2021-10-19 09:22:20 · 67 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
题目:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。本题从上到下,从左到右,每一层打印一行,同样采用层序遍历。方法剑指 Offer 32 - I. 从上到下打印二叉树相同。public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> list = new ArrayList<List<Integer>>原创 2021-10-19 09:16:15 · 68 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
题目:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。本题可以采用层序遍历,从上到下一次遍历二叉树。1.首先定义一个列表list和队列queue,list用来暂存结果。2.将根节点入队列3.进入第一层循环,先求出队列的长度,即为二叉树每一层的元素数量。然后进入第二层循环,第二层循环即为从左到右遍历同一层节点,并且将每个节点的左右子节点入队列。4.当队列为空时,二叉树遍历完毕,最后将list中暂存的结果放入数组中。public int[] levelOrder(TreeNode原创 2021-10-19 09:04:03 · 79 阅读 · 0 评论 -
剑指Offer 09.用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )1.定义两个全局栈stack 和 temp_stack2.在构造函数中初始化这两个栈3.appendTail操作直接将元素添加到stack的栈顶4.deleteHead操作首先将stack中的全部元素,放入temp_stack,然后删除temp_stack的栈顶元素,即为要删原创 2021-10-18 14:01:54 · 65 阅读 · 0 评论