复兴计划01-lc06

StringBuilder和StringBuffer的区别

1. StringBuffer和StringBuilder都是用于字符串动态拼接,但是StringBuffer拼接的函数方法的实现中用了synchornized上锁,效率较低,不过可以用于多线程以此来维护线程安全;相比之下,StringBuilder是单线程,多线程下线程不安全

lc06

复兴计划01-lc06_第1张图片

  class Solution{
   public String convert(String s,int numRows){
     //1.如果字符串长度小于2,则按原路返回
     if(numRows<2) return s;
     //2.首先创建一个集合StrRows,将s中的字符添加到集合当中(按照N:从上到下,从左到右的顺序)  
     List<StringBuffer> StrRows=new ArrayList<StringBuffer>();
     int i=0,flag=-1;
     for(char c;s.toCharArray()){
      //2.1将字符c一个个添加到集合当中的各个子串中
      StrRows.get(i).append(c);
      //2.2若当前行为第一行或者最后一行需要改变方向——>为后面添加字符作铺垫
      if(i==0||i==numRows-1) flag=-flag;
      i+=flag;
      
      //3.从StrRows中的每个子串进行拼接成一个新的大串
      StringBuilder result;
      for(StringBuilder s_row:StrRows){
      result.append(s_row);
      }
     }
     return result.toString();
}
}


///法二(不要忘记ArrayList strLists,StringBuilder是一个包装类,需要按照所需行数(numRows),strLists.add(new StirngBuilder()))
//StringBuilder,StringBuffer这些包装类,转为字符串可以利用toString()直接转
 public String convert(String s,int numRows){
         if(numRows<2) return s;

         //1.创建集合存入s的字符
        char[] c=s.toCharArray();
        ArrayList<StringBuilder> strLists = new ArrayList<>(); //存储输入字符,最后横取字符串拼接即可
        for (int i = 0; i < numRows; i++) {
            strLists.add(new StringBuilder());
        }
        int count=0;//层数
        int flag=-1;//作方向的变换
        for (int i = 0; i < c.length; i++) {
            strLists.get(count).append(c[i]);
            if(count==0||count==numRows-1) flag=-flag; //当输入的字符到达第一层或者最后一层时,需要作出方向改变(++,--变成+-某变量即可,改变变量的正负即可)
            count+=flag;
        }

        //2.横取集合字符串拼接
        StringBuilder res=new StringBuilder();
        for (int i = 0; i < numRows; i++) {
            res.append(strLists.get(i));
        }
        return res.toString();
    }
lc08字符串转换为整数

复兴计划01-lc06_第2张图片
关键:
分为三个点,1.去掉前面的空格 2.抓住符号位±,以及默认状态(注意是否拥有±对数字位的影响)3.遍历数字位,获得数字
4.以及当遇到非数字时,直接返回
复兴计划01-lc06_第3张图片

class Solution {
    public int myAtoi(String s) {
        char[] c = s.trim().toCharArray();
        if (c.length == 0) return 0;
        int res = 0, bndry = Integer.MAX_VALUE / 10;
        int i = 1, sign = 1;
        if (c[0] == '-') sign = -1;
        else if (c[0] != '+') i = 0;
        for (int j = i; j < c.length; j++) {
            if (c[j] < '0' || c[j] > '9') break;
            if (res > bndry || res == bndry && c[j] > '7') return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            res = res * 10 + (c[j] - '0');
        }
        return sign * res;
    }
}

lc09
是否为回文整数

public boolean reverse3(int num) {
        int temp = num;
        int result = 0;
        while (temp != 0) {
            int last = temp % 10;
            result = result * 10 + last;
            temp /= 10;
        }
        return num == result;
    }

你可能感兴趣的:(开发语言)