剑指offer

Author Avatar
YZ 12月 31, 2017
  1. 二维数组中的查找

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class Solution {
    public boolean Find(int target, int [][] array) {
    //从二维数组的左下角开始,向上小,向左大
    int i=array.length-1,j=0;
    while(i>=0 && j<=array[0].length-1){
    int now=array[i][j];
    if(now>target){
    i--;
    }else if(now<target){
    j++;
    }else{
    return true;
    }
    }
    return false;
    }
    }
  2. 替换空格

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public String replaceSpace(StringBuffer str) {
    StringBuffer s=new StringBuffer();
    for (int i=0;i<str.length();i++){
    if(str.charAt(i)==' '){
    s=s.append("%20");
    }else{
    s=s.append(str.charAt(i));
    }
    }
    return s.toString();
    }
    //StringBuffer.append 28ms 9196k
    //s=s+() 25ms 8920k

  3. 从尾到头打印链表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
    ArrayList l=new ArrayList<Integer>();
    ArrayList r=new ArrayList<Integer>();
    if(listNode==null){
    return new ArrayList<>();
    }
    while(listNode!=null){
    l.add(listNode.val);
    listNode=listNode.next;
    }
    //如果用next判断null,注意最后一个节点的val;
    for(int i=l.size()-1;i>=0;i--){
    r.add(l.get(i));
    }
    return r;
    }

    //此题可以用递归/堆栈来实现

  4. 重建二叉树