1. 程式人生 > >leetcode add binary

leetcode add binary

 leet code add binary 題目:https://leetcode.com/problems/add-binary/

解題思路:

1.獲取兩個字串長度的最大值

2.記錄進位標記 int  carry

3.從後向前,以此取數,把與2取模的值插入字串中,記錄進行carry

4.遍歷結束,判斷最高進位是否是1,如果是1,在字串中插入1,如果是0,不做處理。

主要用到了Java 中StringBuilder 中的insert 方法

public static void main(String[] args) {
		String a="11";
		String b="1";
		String s = addBinary(a, b);
		System.out.println(s);
	}

	/**
	 * 	二進位制字串進位
	 * @param a
	 * @param b
	 * @return
	 */
	public static  String addBinary(String a, String b) {
		int num=Math.max(a.length(),b.length());
		StringBuilder sb=new StringBuilder();
		int  carry=0;
		for(int i=0;i<num;i++){
			int p=0;
			int q=0;
			if(i<a.length()&& i<b.length()){
				p=a.charAt(a.length()-1-i)-'0';
				q=b.charAt(b.length()-1-i)-'0';
			}else if(i<a.length()&& i>=b.length()){
				p=a.charAt(a.length()-1-i)-'0';
				q=0;
			}else if(i>=a.length()&& i<b.length()){
				p=0;
				q=b.charAt(b.length()-1-i)-'0';
			}
			//進位
			int realNum=(p+q+carry)%2;
			sb.insert(0,realNum);
			carry=p+q+carry>1?1:0;
		}
		if(carry==1){
			sb.insert(0,1);
		}
		return sb.toString();
	}