9.13力扣练习

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();
  

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值