首页 > 学院 > 开发设计 > 正文

Leetcode030--二进制加法

2019-11-14 10:44:31
字体:
来源:转载
供稿:网友

一、原题

Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100" 

一、中文

给定两个二进制的字符串,返回它们的和,也是二进行制字符串。 

三、举例

str1 = “111”,str2=“1”最后返回的结果的是1000

四、思路

先将对应的两个二进制字符串转换成对应的整数数组,从低位到高位进行相加,同时要考虑到最后相加还要扩展一位的情况。详情请见代码实现。

五、程序

package code;public class LeetCode42{		public static void main(String args[]){		String str = addBinary("111", "1");		System.out.PRintln(str);	}	//数组表示的数字进行加一操作,数组的最高位表示的是数字的最低位	public static String addBinary(String str1, String str2) {		if(str1 == null || str2 == null){			return null;		}else{			int num1[] = new int[str1.length()];			int num2[] = new int[str2.length()];						for(int i = 0; i < str1.length(); i++){				num1[i] = str1.charAt(i) - '0';			}						for(int j = 0; j < str2.length(); j++){				num2[j] = str2.charAt(j) - '0';			}						//使num1保存比较长的数组的长度	        if (num1.length < num2.length) {	            int[] tmp = num1;	            num1 = num2;	            num2 = tmp;	        }	        	        int index1 = num1.length - 1; // 字符数组ca最后一个索引下标	        int index2 = num2.length - 1; // 字符数组cb最后一个索引下标	        int carry = 0; // 下位的进位标识	        int result; // 加载的结果				        //将两个数进行相加	        while (index1 >= 0 && index2 >= 0) {	            result = num1[index1] + num2[index2] + carry;	            num1[index1] = result % 2;	            carry = result / 2;	            index1--;	            index2--;	        }	        	        //处理num1剩余的数字,也就是较长的数字的剩余的数字	        while(index1 >= 0){	        	result = carry + num1[index1];	        	num1[index1] = result%2;	        	carry = result/2;	        		        	if(carry == 0){	        		break;	        	}	        	index1--;	        }	        	        // 将字符数组中的值转换了字符的0或者1	        for (int i = 0; i < num1.length; i++) {	            num1[i] += '0';	        }	        	        // 不需要扩展一位	        if (carry == 0) {	            char[] ch = new char[num1.length];	            for (int i = 0; i < num1.length; i++) {	                ch[i] = (char) (num1[i]);	            }	            return new String(ch);	        }else{	            char[] ch = new char[num1.length + 1];	            ch[0] = '1';	            for (int i = 0; i < num1.length; i++) {	                ch[i + 1] = (char) (num1[i]);	            }	            return new String(ch);	        }	        		}		    }}	---------------------------------output----------------------------------
1000
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表