StringBuilder和StringBuffer的区别
1. StringBuffer和StringBuilder都是用于字符串动态拼接,但是StringBuffer拼接的函数方法的实现中用了synchornized
上锁,效率较低,不过可以用于多线程以此来维护线程安全;相比之下,StringBuilder是单线程,多线程下线程不安全
lc06
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<StringBuilder> 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字符串转换为整数
关键:
分为三个点,1.去掉前面的空格 2.抓住符号位±,以及默认状态(注意是否拥有±对数字位的影响)3.遍历数字位,获得数字
4.以及当遇到非数字时,直接返回
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;}