1、二维数组中的查找

//方法一:
        for(int i=0; i<array.length;i++){
            for(int j = 0;j<array[0].length;j++){
                if(array[i][j] == target){
                    return true;
                }
            }
        }
        return false;
//方法二:
        int x = 0;
        int y = array[0].length - 1;

        while(x < array.length && x >= 0 && y >= 0 && y < array[0].length ){
            if(target == array[x][y]){
                return true;
            }else if(target > array[x][y]){
                x++;
            }else{
                y--;
            }
        }
        return false;

2、替换空格

方法一:
        return  str.toString().replace(" ","%20");
方法二:
        StringBuffer s = new StringBuffer();
        for(int i =0;i<str.length();i++){
            if(str.charAt(i) == ' '){
                s.append("%20");
            }else{
                s.append(str.charAt(i));
            }
        }
        return s.toString();

3、从尾到头打印链表

//方法一:
        ArrayList<Integer> list = new ArrayList<>();
        Stack<Integer> statck = new Stack<>();

        while(listNode != null ){
            statck.add(listNode.val);
            listNode = listNode.next;
        }

        while(!statck.isEmpty()){
            list.add(statck.pop());
        }
        return list;
//方法二:
        ArrayList<Integer> list = new ArrayList<>();
        ListNode temp = listNode;
        while(temp != null){
            list.add(0,temp.val);
            temp = temp.next;
        }
        return list;
//方法三:
        ArrayList<Integer> list = new ArrayList<>();
        ListNode temp = listNode;
        while(temp != null){
            list.add(temp.val);
            temp = temp.next;
        }
        Collections.reverse(list);
        return list;
//方法四:递归
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<>();
        if(listNode == null){
            return list;
        }
        return solve(list,listNode);
    }

    private static  ArrayList<Integer> solve(ArrayList<Integer> list,ListNode listNode){
        if(listNode.next != null){
            list = solve(list,listNode.next);
        }
        list.add(listNode.val);
        return list;
    }
//方法五:递归
public class Solution {
    ArrayList<Integer> list = new ArrayList<>();
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if(listNode != null){
            printListFromTailToHead(listNode.next);
            list.add(listNode.val);
        }
        return list;
}

4、重建二叉树

import java.util.*;
public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<pre.length;i++){
            map.put(in[i],i);
        }

        return buildTree(pre,0,pre.length-1,in,0,in.length-1,map);
    }

    private TreeNode buildTree(int[] preorder,int preLIndex,int preRIndex,int[] inorder,int inLIndex,int inRIndex,Map<Integer,Integer> map){
        if(preLIndex > preRIndex || inLIndex >inRIndex){
            return null;
        }
        int pIndex = map.get(preorder[preLIndex]);
        TreeNode root = new TreeNode(preorder[preLIndex]);
        root.left = buildTree(preorder,preLIndex+1,preLIndex+pIndex-inLIndex,inorder,inLIndex,pIndex-1,map);
        root.right = buildTree(preorder,pIndex-inLIndex+preLIndex+1,preRIndex,inorder,pIndex+1,inRIndex,map);
        return root;
    }
}

5、


6、