[LeetCode] Reverse Integer (JS)
문제
Given a 32-bit signed integer, reverse digits of an integer.
Note:
Assume we are dealing with an environment that could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
입출력 예
Input: x = -123
Output: -321
접근
어제 atoi문제를 했었는데 이와 비슷한 방법으로 풀 수 있을 것 같았다.
1. 부호를 저장할 변수 sign과 인덱스를 나타낼 변수 i, 역 정수를 하나씩 저장할 변수 resultNum을 만든다.
2. 파라미터 x로 들어오는 전달인자를 문자열로 변경하고 부호가 '-'가 있는지 판단한다. 있으면 sign을 -1로 변경하고 i++
3. for문을 이용한 반복을 하는데, j는 x의 길이 부터 i까지 감소한다. 이때 resultNum = resultNum * 10 + (x[j] - '0');
4. resulNum이 INT범위 내인지 확인하고 return.
풀이
var reverse = function(x) {
x = x + '';
let i = 0;
let resultNum = 0
let sign = 1;
if(x[i] === '-'){
sign = -1;
i++;
}
for(let j = x.length - 1; j >= i; j--){
resultNum = resultNum * 10 + (x[j] - '0');
}
if (resultNum * sign < Math.pow(2,31) - 1 && resultNum * sign > -Math.pow(2,31)){
return resultNum * sign;
}else{
return 0;
}
};
테스트에 통과하지만 x는 정수 이므로 사실 위의 단계를 거칠 필요가 없다... 수정한 코드는 아래와 같다.
var reverse = function(x) {
let reverseNum = 0;
while(x !== 0){
reverseNum = reverseNum * 10 + x % 10;
x = parseInt(x / 10);
}
return (reverseNum < Math.pow(2,31) - 1 && reverseNum > -Math.pow(2,31)) ? reverseNum : 0;
};
line갯수는 확연히 줄어들었고 더 간결한 것 같다. x가 정수이기 때문에 위와 같은 방법으로 작성하면 부호에 관계없이 잘 작동한다.
다른 방법
직접적으로 while이나 for를 사용하지 않고 메소드들을 사용하여 해결하는 방법 역시 있다.
var reverse = function(x) {
let reverseNum = parseInt(Math.abs(x).toString().split('').reverse().join('')) * Math.sign(x);
return (reverseNum < Math.pow(2,31) - 1 && reverseNum > -Math.pow(2,31)) ? reverseNum : 0;
};
Author And Source
이 문제에 관하여([LeetCode] Reverse Integer (JS)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gyu716625/LeetCode-Reverse-Integer-JS저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)