제목 설명
두 개의 이진 문자열을 제공하고 그 합계를 이진 표현으로 반환합니다.
입력 내용은 비어 있지 않은 문자열이며 숫자 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();
}
}