250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(Leet Code JS)Multiply Strings 본문
728x90
반응형
https://leetcode.com/problems/multiply-strings/
문자열로 주어진 두 수를 곱한 값을 리턴.
문자열의 길이가 200이기 때문에 Number 형으로 나타낼 수 있는 수를 초과할 수 있다.
우선 num1과 num2 중 하나라도 "0"이라면 바로 "0"을 리턴.
arr는 num1과 num2의 길이를 합한 크기로 선언하여 0으로 초기화한다.
이후, 두 문자열을 하나씩 곱하여 arr에 저장한다.
arr[i + j + 1] += num1[i] * num2[j]
각 자릿수를 곱한다.
arr[i + j] += arr[i + j + 1] / 10
위에서 곱한 결과가 10 이상이라면 올림수가 있다는 뜻이므로 arr[i + j + 1] / 10의 결과를 arr[i + j]에 저장한다.
arr[i + j + 1] %= 10
올림수를 처리했기 때문에 나머지 값을 arr[i + j + 1]에 다시 저장한다.
3가지의 절차를 끝내면 모든 곱셈은 끝이다.
이후 arr을 순회하면서 0이 아닌 첫 수가 나오면 그 자리에서부터 slice 하여 join("")하면 된다.
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function(num1, num2) {
if(num1 === "0" || num2 === "0"){
return "0";
}
const arr = Array(num1.length + num2.length).fill(0);
let answer = "";
for(let i = num1.length - 1; i >= 0; i--){
for(let j = num2.length - 1; j >= 0; j--){
arr[i + j + 1] += parseInt(num1[i]) * parseInt(num2[j]);
arr[i + j] += Math.floor(arr[i + j + 1] / 10);
arr[i + j + 1] %= 10;
}
}
for(let i = 0; i < num1.length + num2.length; i++){
if(arr[i] !== 0){
return arr.slice(i).join("");
}
}
return "0";
};
728x90
반응형
'Leet Code 알고리즘' 카테고리의 다른 글
(Leet Code JS)Letter Combinations of a Phone Number (0) | 2022.03.22 |
---|---|
(Leet Code JS)Spiral Matrix (0) | 2022.03.21 |
(Leet Code JS)House Robber II (0) | 2022.03.16 |
(Leet Code JS)House Robber (0) | 2022.03.14 |
(Leet Code JS)Valid Sdoku (0) | 2022.03.11 |