
剑指offer-java实现
iamwiam
Hello World
展开
-
二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 功能代码如下:/***既然需要从二维数组中查找是否含有指定的整数,充分利用二维数组每行从左到右递增,和每列从上到下递增的规律。*此处我从右上角开始比较*/public class Solution{ publi原创 2017-05-10 09:21:32 · 310 阅读 · 0 评论 -
反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素。思路 用pre表示当前节点的前一节点,用next表示当前节点的后续节点。 对于任意节点,需要将指向next变成指向pre即可完成链表反转的效果。步骤如下: 1.先用next保存head的下一个节点信息,保证head指向pre之后,head->next节点仍然可以找到。 2.让head指向pre; 3.依次反转下一节点。代码publi原创 2017-08-18 18:33:16 · 200 阅读 · 0 评论 -
丑数
1.题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当作是第一个丑数。求按从小到大的顺序的第N个丑数。2.分析 可以定义一个存储N个丑数的数组ugNum[N+1]。依据题意,第一个丑数是1,则ugNum[0]=1。又因为丑数只包含因子2、3、5,因此欲按照从小到大的顺序给出第N个丑数,只需将满足要求的丑数排入原创 2017-07-25 17:09:40 · 612 阅读 · 0 评论 -
栈的压入、弹出序列
1.题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。2.分析:借助一个辅助栈,按照压入序列入栈,然后每入栈一次,与出栈序列进行比较,若相等,则出辅助栈。最终如果辅助栈为空,说明该弹出原创 2017-07-25 14:53:50 · 216 阅读 · 0 评论 -
剑指offer-正则表达式匹配
题目描述 请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配 解题思路 逐个匹配字符 当模式中的第二个字符不是“*”时: 1、如果字符串第一个字原创 2017-08-16 17:04:50 · 254 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
1.题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。2.代码及思路public class Solution { public static void main(String[] args) { int[] a = {4,6,12,8,16,14,10}; boo原创 2017-06-14 23:28:20 · 197 阅读 · 0 评论 -
顺时钟打印矩阵
1.题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 2.思路:每次输出最外层的矩阵值,然后层数减一,循环进行。值得注意的是特殊情况,当只剩下一列时,从上到下输出,与从下到上输出不能原创 2017-06-08 16:00:27 · 289 阅读 · 0 评论 -
用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。/***思路:入队直接用stack1存储,出队需要满足先进先出,因此需要再用一个*stack2将stack1中的内容输出*/Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Intege原创 2017-05-10 15:18:28 · 243 阅读 · 0 评论 -
重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { * int val; *原创 2017-05-10 12:45:14 · 243 阅读 · 0 评论 -
从尾到头打印链表
题目:输入一个链表,从尾到头打印链表每个节点的值/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }*思路:既然从尾到头打印链表每个节原创 2017-05-10 10:59:19 · 191 阅读 · 0 评论 -
替换空格
题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。/***思路一:遍历字符串,对每个字符进行匹配*/public class Solution { public String replaceSpace(StringBuffer str) { int len =原创 2017-05-10 09:57:20 · 361 阅读 · 0 评论 -
之字形打印树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路 借用两个栈,分别保存奇数层和偶数层节点。 每当从左到右输出奇数层的时候,顺便将奇数层的子节点按照从左到右存在偶数栈中,这样下一层的偶数层节点从栈中输出的顺序便可以按照从右到左了。 对于偶数层也是按照这种方法,输出的时候将接下来的奇原创 2017-08-24 16:44:56 · 649 阅读 · 0 评论