JZ2.请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路一:
重新创建一个三倍字符串大小的字符数组,用charAt()方法提取字符作比较,如果不为空格,加入字符数组,如果为空格,则替换为"%20"
import java.util.*;
public class Solution {
public String replaceSpace (String s) {
// write code here
int length=s.length();
char a[]=new char[length*3];
int index=0;
for(int i=0;i<length;i++){
//提取指定字符
if(s.charAt(i)==' '){
a[index++]='%';
a[index++]='2';
a[index++]='0';
}else{
a[index++]=s.charAt(i);
}
}
//将字符数组转为string类型,第一个参数是开始的位置,第二个参数是数量
return new String(a,0,index);
}
}
解题思路二:
用split()方法分隔字符串,返回一个字符数组,除最后一个字符数组之外,每个字符数组之后都应该加上一个"%20",因为该题字符串末尾的空格也要求转换为"%20",所以在字符串后面加上一个" end",再用split(" “)分割(连续两个空格保留一个空格),去掉最后一个字符数组,剩下的字符数组除倒数第二个字符数组之外,每个字符数组后都应该加上一个”%20"。
import java.util.*;
public class Solution {
public String replaceSpace (String s) {
// write code here
StringBuilder res=new StringBuilder();
String b=s+" end";
String[] array=b.split(" ");
for(int i=0;i<array.length-1;i++){
res.append(array[i]);
if(i!=array.length-2){
res.append("%20");
}
}
return String.valueOf(res);
}
}
JZ3.输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
class ListNode{
int val;
ListNode next;
ListNode(int val){
this.val=val;
}
}
解题思路一:
用非递归的方法,按链表从尾到头输出,体现了先进后出,用ArrayList的add(index,value)方法,把所有值插入到同一个同一个指定位置。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode){
ArrayList<Integer> al=new ArrayList<>();
while(listNode!=null){
al.add(0,listNode.val);
listNode=listNode.next;
}
return al;
}
}
解题思路二:
使用递归的方法
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> al=new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode){
if(listNode!=null){
printListFromTailToHead(listNode.next);
al.add(listNode.val);
}
return al;
}
}
JZ4.输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
解题思路:
1.前序序列的第一个数字为根结点
2.根据中序序列确定左右子列,根结点前为左子列,根结点后为右子列
3.再对左右子列使用递归,重复第一二步骤
import java.util.Arrays;
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre.length==0||in.length==0){
return null;
}
//确定根结点
TreeNode root=new TreeNode(pre[0]);
for(int i=0;i<in.length;i++){
if(in[i]==pre[0]){
//copyOfRange包含第一个参数,不包含第二个参数
root.left=reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1),Arrays.copyOfRange(in,0,i));
root.right=reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length),Arrays.copyOfRange(in,i+1,in.length));
break;
}
}
return root;
}
}