其他分享
首页 > 其他分享> > 剑指offer之:1-3总结(二维数组中的查找;替换空格;从头到尾打印列表)

剑指offer之:1-3总结(二维数组中的查找;替换空格;从头到尾打印列表)

作者:互联网

剑指offer回顾总结

本文重新回顾剑指offer的题目,给出思路,并对易错点进行总结记录。

1. 题目

2. 思路

3.代码块

public class Solution {
  public boolean Find(int target, int [][] array) {
      int len1 = array[0].length;
      int len2 = array.length;
      if(len1 <=0 || len2 <=0){
          return false;
      }
      int i = 0;
      int j = len1 - 1;
      while(i < len2 && j >= 0){
          if(array[i][j] == target){
              return true;
          }else if(array[i][j] < target){
              i++;
          }else{
              j--;
          }
      }
      return false;

  }
}

代码解析1:

需要注意while的使用。
有一个起始值,然后满足条件时进行循环,直到不满足条件结束。
注意与for的区分。
note:“局部变量在栈内存中存在,当for循环语句结束,那么变量会及时被gc(垃圾回收器)及时的释放掉,不浪费空间。如果使用循环之后还想去访问循环语句中控制那个变量,使用while循环”

public class Solution {
    public String replaceSpace(StringBuffer str) {
        if(str.length()  <= 0){
            return "";
        }
    	int num = 0;
        for(int i = 0; i < str.length(); i++){
            if(str.charAt(i) == ' '){
                num++;
            }
        }
      
        int len1 = str.length() + 2 * num;
        StringBuffer str1 = new StringBuffer();
        str1.setLength(len1);
        
        int j = len1 - 1;
        for(int k = str.length() - 1; k >= 0; k--){
                if(str.charAt(k) == ' '){
                    str1.setCharAt(j--, '0');
                    str1.setCharAt(j--, '2');
                    str1.setCharAt(j--, '%');
                }else{
                    str1.setCharAt(j--, str.charAt(k));
                }
        }
       // return str1.toString();
        return String.valueOf(str1);

    }
}

代码解析2:

1.设置StringBuffer长度时,使用setLength()函数。
反例:我使用圆括号设置长度,不能通过。
2.设置新字符时,使用charAt(索引,‘字符’),不要使用赋值。
3.以原字符串为循环条件,在charAt(j–,…)自减函数对新字符串的索引进行更新,一层for循环就可以。
总结:对StringBuffer的相关函数不熟悉。

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
import java.util.Stack;//自己导包!
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if(listNode == null){
            return result;
        }
        Stack<Integer> st = new Stack<Integer>();
        while(listNode != null){
            st.push(listNode.val);
            listNode = listNode.next;
        }
        while(!st.isEmpty()){
            result.add(st.pop());
            
        }
        return result;
    }
}

代码解析3:

  1. 不需要使用length,直接使用非空作为判断条件。
  2. 但是需要注意null还是isEmpty()。
    他们的区别是null是对象,后者是值为空。
  3. 不要忘记导包import java.util.Stack;(如果是在本地编译器可能不需要,会有提醒自动添加Java包)
  4. stack使用的是add,不是push不要混了。基本函数记不清。需要扎实基础。

标签:return,listNode,int,str1,offer,空格,ArrayList,从头到尾,public
来源: https://blog.csdn.net/Irving_zhu/article/details/104757207