1. StringBuffer和StringBuilder都是用于字符串动态拼接,但是StringBuffer拼接的函数方法的实现中用了synchornized
上锁,效率较低,不过可以用于多线程以此来维护线程安全;相比之下,StringBuilder是单线程,多线程下线程不安全
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();
}
关键:
分为三个点,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;
}