题目4~7
来源:互联网 发布:网络网警客服在线电话 编辑:程序博客网 时间:2024/06/17 22:12
4.替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
public class Solution { public String replaceSpace(StringBuffer str) { //return str.toString().replaceAll(" ","%20"); char[] cs=str.toString().toCharArray(); int blank=0; for(int i=0;i<cs.length;i++){ if(cs[i]==' ') blank++; } char[] res=new char[cs.length+blank*2]; int j=res.length-1; for(int i=cs.length-1;i>=0;i--){ if(cs[i]==' '){ res[j--]='0'; res[j--]='2'; res[j--]='%'; continue; }else{ res[j--]=cs[i]; } } return new String(res); }}
面试题5:从尾到头打印链表
题目大致为:
输入一个链表的头结点,从未到头反过来打印每个结点的值。
思路:
题目的要求是进行从尾到头输出,而链表的查找只能是顺序查找,栈的结构满足这样的条件:先进后出。同样,也可以使用递归的方式求解。
import java.util.ArrayList;public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ListNode head=listNode; Stack<Integer> stack=new Stack(); while(head!=null){ stack.push(head.val); head=head.next; } ArrayList<Integer> res=new ArrayList(); while(!stack.isEmpty()){ res.add(stack.pop()); } return res; }}
6.重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:
如图所示,在前序遍历的序列中第一个就是树的根结点,此时再在中序遍历的序列里查找这个根结点,则中序遍历的序列里根结点左侧的就是左子树,右侧的就是右子树,再对左右子树进行同样的操作,此时可以使用递归实现,这样便能构造出这个二叉树
public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { TreeNode root=new TreeNode(pre[0]); int leftNum=0;//左子树节点个数 for(int i=0;i<in.length;i++){ if(in[i]==root.val) break; leftNum++; } int rightNum=pre.length-leftNum-1;//右子树节点个数 if(leftNum>0){ int[] leftPre=new int[leftNum];//左子树的前序遍历结果 int[] leftIn=new int[leftNum];//左子树的中序遍历结果 for(int i=0;i<leftNum;i++){ leftPre[i]=pre[i+1];//i+1的原因,是每次pre[0]对应为子树的根 leftIn[i]=in[i]; } TreeNode leftNode=reConstructBinaryTree(leftPre,leftIn); root.left=leftNode;//根节点的左孩子节点 } if(rightNum>0){ int[] rightPre=new int[rightNum]; int[] rightIn=new int[rightNum]; for(int i=0;i<rightNum;i++){ rightPre[i]=pre[leftNum+i+1]; rightIn[i]=in[leftNum+i+1];//+1的原因是,中间的有一个是根 } TreeNode rightNode=reConstructBinaryTree(rightPre,rightIn); root.right=rightNode; } return root; } }
public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1); return root; } //前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6} private TreeNode reConstructBinaryTree(int [] pre,int startPre,int endPre,int [] in,int startIn,int endIn) { if(startPre>endPre||startIn>endIn) return null; TreeNode root=new TreeNode(pre[startPre]);//每次都将根节点取出 for(int i=startIn;i<=endIn;i++) if(in[i]==pre[startPre]){//每次在中序中找到根 root.left=reConstructBinaryTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1); root.right=reConstructBinaryTree(pre,i-startIn+startPre+1,endPre,in,i+1,endIn); } return root; }}
阅读全文
0 0
- 题目4~7
- 题目4
- 题目4
- 题目1043:Day of Week 题目7
- google面试题目7
- 笔试面试题目7
- 离散题目7
- 离散题目7
- 指针7题目
- SDUT-离散题目7
- 离散题目7
- 离散题目7
- 离散题目7
- sdut-离散题目7
- 离散题目7
- ???题目7 : Bounce
- 笔试题目4
- 常见面试题目4
- 逆元
- CSU-ACM2017暑期训练12-KMP F
- array.foreach() 和 array.map() 的用法
- Currency Exchange
- java中的接口和抽象类
- 题目4~7
- Java的时间类型数据使用Json字符串传输时变成一串数字的解决方法
- C语言中access函数的使用
- linux搭建本地yum源
- [编程题] 棋子翻转
- 数据排序之后相邻数的最大差值
- 2017 Multi-University Training Contest
- 练习 3-2 编写一个函数escape(s, t),将字符串t 复制到字符串s 中,并在复制过程中将换行符、制表符等不可见字符分别转换为\n、\t等相应的可见的转义字符序列。要求使用swich语句。
- 古文觀止卷八_進學解_韓愈