LeetCode : 이진 합산

제목 설명

두 개의 이진 문자열을 제공하고 그 합계를 이진 표현으로 반환합니다.

입력 내용은  비어 있지 않은  문자열이며 숫자 1 및  만 포함합니다  0.

아이디어

  • a는 긴 문자열을 나타내는 데 사용되며 b는 다른 문자열을 나타냅니다.
  • a를 문자 배열 ch1로, b를 문자 배열 ch2로 변환

문자 배열 ch1과 ch2를 뒤에서 앞으로 순회합니다 .ch2 는 ch1 이전에 순회 될 수 있으므로 임시 문자 를 정의해야 합니다 .①ch2가 순회되지 않으면 ch2의 문자가 임시 문자에 저장됩니다 .②ch2가 순회되면 , 그러면 임시 문자에 '0'이 저장됩니다.

  • 캐리 를 의미하는 문자를 정의합니다 . 초기 값은 '0'입니다.
  • 예비 결과는 CH1에 저장

상황 ① 캐리가 '0'

  • ch1의 문자 == '1', ch2의 문자 == '1', ch1의 문자를 '0'으로 수정하고 캐리를 '1'로 수정
  • ch1의 문자 == '0'및 ch2의 문자 == '1', ch1의 문자를 '1'로 수정

사례 ② 캐리가 '1'

  • ch1의 문자 == '0', ch2의 문자 == '0', ch1의 문자를 '1'로 수정하고 캐리를 '0'으로 수정
  • ch1의 문자 == '1'및 ch2의 문자 == '1', 계속
  • ch1 또는 ch2의 문자가 '1'이면 ch1의 문자가 '0'으로 변경됩니다.

모든 순회가 완료되면 새로운 StringBuffer 객체를 사용하여 최종 계산 결과를 저장합니다 . ① carry가 '1'이고 내용이 "1"이면 ch1의 요소가 순서대로 연결됩니다. '1'이 아니라 ch1의 요소를 직접 연결하십시오.

암호

class Solution {
    public String addBinary(String a, String b) {
        if(a.length()<b.length()){
            String tem=a;
            a=b;
            b=tem;
        }
        char[] ch1=new char[a.length()];
        char[] ch2=new char[b.length()];
        for(int i=0;i<ch1.length;i++){
            ch1[i]=a.charAt(i);
        }
        for(int i=0;i<ch2.length;i++){
            ch2[i]=b.charAt(i);
        }
        int i=ch1.length-1;
        int j=ch2.length-1;
        char char2='0';
        char tem='0';
        for(;i>=0;i--){
            char2='0';
            if(j>=0){
                char2=ch2[j];
            }
            if(tem=='0'){
                if(ch1[i]=='1'&&char2=='1'){
                    ch1[i]='0';
                    tem='1';
                }else if(ch1[i]=='0'&&char2=='1'){
                    ch1[i]='1';
                }
            }else if(tem=='1'){
                if(ch1[i]=='0'&&char2=='0'){
                    ch1[i]='1';
                    tem='0';
                }else if(ch1[i]=='1'&&char2=='1'){
                    j--;
                    continue;
                }else if(ch1[i]=='1'||char2=='1'){
                    ch1[i]='0';
                }
            }
            j--;
        }
        StringBuffer re=new StringBuffer();
        if(tem=='1'){
            re.append('1');
        }
        for(int d=0;d<ch1.length;d++){
            re.append(ch1[d]);
        }
        return re.toString();
    }   
}

 

추천

출처blog.csdn.net/weixin_43939602/article/details/114236772