随笔分类 - 算法-剑指offer
摘要:import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; /** * 输入一个字符串,按字典序打印出该字符串中字符的所有排列。 * 例如输入字符串abc,则按字典序打印出由字符a,b,c所能
阅读全文
摘要:/** * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。 * 要求不能创建任何新的结点,只能调整树中结点指针的指向。 * <p> * 思路 * 方式一 * 1、先按中序遍历,把节点存入list * 2、再把list的节点连接成双向链表 * <p> * 方式二 * 中序遍历时直接指向
阅读全文
摘要:class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { this.label = label; } } /** *
阅读全文
摘要:import java.util.ArrayList; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }
阅读全文
摘要:/** * 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 * 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 * <p> * 思路 * 二叉搜索树,满足根节点大于左子树所有节点,小于右子树左右节点 * 将数组从后往前遍历,每个节点都是所在子树的
阅读全文
摘要:import java.util.ArrayList; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }
阅读全文
摘要:/** * 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。 * 假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序, * 序列4,5,3,2,1是该压栈序列对应的一个弹出序列, * 但4,3,5,1,2就不可能是该压栈序列的弹出序列。
阅读全文
摘要:import java.util.ArrayList; /** * 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, * 例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 * 则依次打印出数字1,2,3,4,8,12,16
阅读全文
摘要:class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } /** * 操作给定的二叉树,将其变换为源二叉树的镜像。
阅读全文
摘要:class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } import javax.swing.tree.Tree
阅读全文
摘要:class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } /** * 目标: * 输入两个单调递增的链表,输出两个链表合成后的链表, * 当然我们需要合成后的链表满足单调不减规则。
阅读全文
摘要:class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } /** * 输入一个链表,反转链表后,输出新链表的表头。 * 注意:编程时,首先判断非法条件 * 思路: * 题目考的是递归
阅读全文
摘要:class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } /** * 输入一个链表,输出该链表中倒数第k个结点。 * 注意:编程时,首先判断非法条件 */ public class
阅读全文
摘要:/** * 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 */ public class Solution11 { public int NumberOf1(int n) { if (n == 0) { return 0; } return Integer.toBinary
阅读全文
摘要:解题思路一 /** * 目标: * 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。 * 求该青蛙跳上一个n级的台阶总共有多少种跳法。 * 思路: * 因为是n级台阶,第一步有n种跳法:跳1、2、3。。。n级 * 第一步: * 跳1级,剩下n-1级,则剩下的跳法是f(n-1) *
阅读全文
摘要:/** * 目标:一只青蛙一次可以跳上1级台阶,也可以跳上2级。 * 求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 * 思路: * 只有1级时有1种 * 只有两级时有2种 * 之后每级,都有f(n-1)+f(n-2)种 */ public class Solution8
阅读全文
摘要:/** * 目标:大家都知道斐波那契数列,现在要求输入一个整数n, * 请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 * n<=39 * 思路:前两项相加为第三项 * 代码: */ public class Sulution7 { public int Fibonacci(in
阅读全文
摘要:/** * 目标:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 * 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 * 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 * NOTE:给出的所有元素都大于0,若数组大小为0,请
阅读全文
摘要:/** * 目标:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 * 思路: * 队列是先进先出的数据结构 * 栈是先进后出的数据结构 * 当把一个stack倒进另一个stack就变成了先进先出 * 注意:怎么使得整个算法是可以循环的 * 入队时,把node放入
阅读全文
摘要:import java.util.HashMap; //Definition for binary tree class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } /** * 目
阅读全文