67二进制求和
//定义一个用stringbubulider创建一个result,取两个字符串的最后一位索引开始倒叙遍历,定义sum对对应位上的二进制进行累加,累加后
//对sum进行%2,如果是1,0,则返回原值,如果位2则要进位,原值变成零,然后对carry进行赋值,如果要进位,赋值为1则下一个sum就会加上1
//值就会头插到result里面最后转换成字符串返回
class Solution {
public String addBinary(String a, String b) {
StringBuilder result = new StringBuilder();
int carry = 0; // 初始化进位为0
int i = a.length() - 1; // 从两个字符串的末尾开始遍历
int j = b.length() - 1;
// 当两个字符串都没有遍历完时
while (i >= 0 || j >= 0) {
int sum = carry; // 当前位的和先加上之前的进位
if (i >= 0) sum += a.charAt(i--) - '0'; // 从字符串a中取当前位
if (j >= 0) sum += b.charAt(j--) - '0'; // 从字符串b中取当前位
// 计算当前位的值和新的进位
result.insert(0, sum % 2); // 将当前位的值(0或1)插入到结果字符串的最前面
carry = sum / 2; // 更新进位
}
// 如果最后还有进位,则将其加到结果的最前面
if (carry > 0) {
result.insert(0, carry);
}
return result.toString();
}
}
6.z字型变换
//通过 List<StringBuilder> rows = new ArrayList<StringBuilder>();建立一个二维数组,定义i,用做遍历数组,flag转向
//将s转换成字符数组,开始遍历里面的字符,如果i == 0 || i == numRows -1,flag的符号将被反转,首先定义flag为-1,i==0,变为
//1,开始累加这里遍历的是行,当遍历到底部又lag反转,此时往回的列遍历,同时往每一行尾插字符,这样就完成z字排列,然后在定义一个
// StringBuilder res,将刚才数组里的字符串按顺序尾插,再转化为数组即是答案
class Solution {
public String convert(String s, int numRows) {
if(numRows<2){
return s;
}
List <StringBuilder> rows=new ArrayList <StringBuilder>();
for(int i=0;i<numRows;i++)rows.add(new StringBuilder());
int i=0,flag=-1;
for(char c : s.toCharArray()){
rows.get(i).append(c);
if(i==0||i==numRows-1){
flag=-flag;
}
i+=flag;
}
StringBuilder res =new StringBuilder();
for(int j=0;j<numRows;j++){
res.append(rows.get(j));
}
return res.toString();
}
}