var addStrings = function (num1, num2) {
if (num2.length > num1.length) return addStrings(num2, num1);
let j = num2.length - 1;
let answer = '';
let carry = 0;
for (let i = num1.length - 1; i >= 0; i--) {
let digit1 = i < 0 ? 0 : num1[i] - 0;
let digit2 = j < 0 ? 0 : num2[j] - 0;
let sum = carry + digit1 + digit2;
carry = 0;
if (sum >= 10) {
carry = 1;
sum %= 10;
}
answer = `${sum}${answer}`;
j--;
}
if (carry > 0) answer = `${carry}${answer}`;
return answer;
};
Add Strings 문제를 다시 풀어봤다.
let digit1 = i < 0 ? 0 : num1[i] - 0;
이 코드에서, JS의 암묵적 형변환을 생각해서 num1[i] - 0
을 해서 num1[i]
를 숫자 타입으로 바꿔서 계산해줬다.
sum >= 10
보다 큰 경우는, 다음 자리에 +1
을 해줘야 하기 때문에 carry
변수를 1
로 만들어준다.
그 밑에 carry
를 다시 0으로 초기화 시켜준 이유는, 마지막에 if(carry > 0)
조건에 걸릴 수가 있기 때문이다.
마지막 조건은 num1 = 9
, num2 = 1
인 경우를 생각해보자. 마지막 조건이 들어가지 않고 바로 answer
을 return
하게 되면, 0
을 return
하게 되는데, 이러한 경우를 예외 처리 하기 위해 해당 조건을 넣어줬다.
수정, 지적을 환영합니다!
https://leetcode.com/problems/add-strings/