剑指offer-java
woshixiaodashen
这个作者很懒,什么都没留下…
展开
-
剑指Offer--替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路一新建一个StringBuffer,一个个往里挪,遇到空格替换为%20 思路二统计空格数目,计算新的长度,从后往前操作StringBuffer,不需要额外的空间,减少挪动次数:/** * StringBuffer能重新设置length原创 2017-06-29 20:50:29 · 347 阅读 · 1 评论 -
剑指Offer——树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 树节点定义如下:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val =原创 2017-07-30 16:22:42 · 212 阅读 · 0 评论 -
剑指Offer——合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 链表节点定义如下:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }解题思路 递归 public class So原创 2017-07-30 16:08:34 · 248 阅读 · 0 评论 -
剑指Offer——反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素。 其中,链表节点定义为:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }解题思路 用栈 借助前后指针,逐个反转 借助临时头结点,原头结点之后的节点不断移动到临时原创 2017-07-30 15:51:29 · 245 阅读 · 0 评论 -
剑指Offer——链表中倒数第K个节点
题目描述输入一个链表,输出该链表中倒数第k个结点。 链表节点定义如下:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }解题思路 使用快慢指针 使用栈 使用快慢指针的程序如下:public class Solutio原创 2017-07-29 17:49:44 · 182 阅读 · 0 评论 -
剑指Offer——调整数组顺序使奇数位于偶数前面
问题描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路首先想到的是冒泡,把奇数往前面冒,偶数往下沉,奇偶相遇则交换程序如下:public class Solution { public void reOrderArray(int [] array) {原创 2017-07-29 17:36:02 · 158 阅读 · 0 评论 -
剑指Offer——数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路 exponent为负数,结果取倒数 从二进制的角度看211可以表示为21011=21000∗210∗212^{11} 可以表示为 2^{1011}=2^{1000}*2^{10}* 2^{1}那么程序如下 public class Solution { publi原创 2017-07-29 17:26:38 · 189 阅读 · 0 评论 -
剑指Offer -- 二维数组中的查找
二维数组中的查找题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组array和一个整数target,判断数组中是否含有该整数。 思路一根据二维数组自上而下、从左到右递增的规律,选取右上角或左下角作为与target比较的起点。 以右上角元素array[row][col]为例: 当target<array[row]原创 2017-06-13 15:27:51 · 273 阅读 · 0 评论 -
剑指offer——二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 >>>移位运算符的使用 public class Solution { public int NumberOf1(int n) { int count = 0; while(n != 0){ if((n&1) == 1)count++;原创 2017-07-03 22:10:52 · 182 阅读 · 0 评论 -
剑指Offer--跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析 当n=1,只有一种跳法 当n=2,有两种跳法 否则,青蛙跳到第n级台阶之前,可以从第n-1级和第n-2级跳过去,所以f(n)=f(n-1)+f(n-2),这个问题变成了斐波那契问题 public class Solution { public int JumpFloor(int targe原创 2017-07-03 17:59:50 · 230 阅读 · 0 评论 -
剑指Offer--两个栈实现一个队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路 两个栈,stack1用于入队,stack2用于出队。 当出队时发现stack2为空,把stack1中的元素依次弹出并压入stack2中 import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Sta原创 2017-07-01 17:04:55 · 330 阅读 · 0 评论 -
剑指Offer--重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 二叉树节点定义: public class TreeNode { int val; TreeNode left;原创 2017-07-01 16:40:14 · 268 阅读 · 0 评论 -
剑指offer--从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。 节点定义:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } 思路一利用栈,先入后出import java.util.*;原创 2017-06-29 21:30:51 · 205 阅读 · 0 评论 -
剑指Offer——二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6原创 2017-07-30 17:24:41 · 183 阅读 · 0 评论