05. 替换空格
代码:
class Solution {
public String replaceSpace(String s) {
char[] chars=s.toCharArray();
String result="";
for(int i=0;i<chars.length;++i){
if(chars[i]==' '){
result+="%20";
}else{
result+=chars[i];
}
}
return result;
}
}
改进:
偷懒…之前忘了用replace方法
class Solution {
public String replaceSpace(String s) {
String res=s.replace(" ","%20");
return res;
}
}
06. 从尾到头打印链表
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) {
ArrayList<Integer> a = new ArrayList<>();
while(head!=null){
a.add(head.val);
head=head.next;
}
int[] arr=new int[a.size()];
for(int i=0;i<a.size();++i){
arr[i]=a.get(a.size()-i-1);
}
return arr;
}
}
改进:
1.递归法:
class Solution {
ArrayList<Integer> a = new ArrayList<>();
public int[] reversePrint(ListNode head) {
recur(head);
int[] arr=new int[a.size()];
for(int i=0;i<a.size();++i){
arr[i]=a.get(i);
}
return arr;
}
void recur(ListNode head){
if(head==null){
return;
}
recur(head.next);
a.add(head.val);
}
}
2.改进版递归法:
直接使用数组,不用ArrayList进行过度,提高速度。
class Solution {
int i=0,j=0;
int []arr;
public int[] reversePrint(ListNode head) {
recur(head);
return arr;
}
void recur(ListNode head){
if(head==null){
arr=new int[i];
return;
}
i++;
recur(head.next);
arr[j++]=head.val;
}
}
3.栈:
class Solution {
public int[] reversePrint(ListNode head) {
LinkedList<Integer> stack = new LinkedList<>();
while(head!=null){
stack.addLast(head.val);
head=head.next;
}
int[] arr=new int[stack.size()];
for(int i=0;i<arr.length;++i){
arr[i]=stack.removeLast();
}
return arr;
}
}
注意:
1.在LinkedList中,addLast()仅仅将元素链接到队列尾部。然而add()不仅将元素链接到队列尾部,还返回true。
2.removeLast()方法返回列表末尾的最后一个元素或元素。