1일 1코딩 - leetcode 9.isPalindrome
앞뒤로 뒤집었을때 똑같은 숫자인지 판별
내 풀이
let x = 12121
var isPalindrome = function (x) {
if (x < 0) {
return false
} else {
let strX = x.toString().split('')
let copyStrX = strX.slice()
let newArray = new Array
let i= 0
while( i <strX.length){
let popped = copyStrX.pop()
console.log(popped)
newArray.push(popped)
console.log(newArray)
i ++;
}
let ccX = strX.join()
let ccA = newArray.join()
if (ccX !== ccA) {
return false
} else {
return true
}
}
}
- 숫자를 str으로 만들고 그 만든 숫자를 뒤에서부터 pop해서 새로운 array에 push하고 기존 array와 비교
- 기존 arr을 reference해서 새로 copyStrX를 만듦
strX===newArray
를 했을 때 계속 결과가 false가 나와서 join을 하고 한 문자로 만들고 비교해보니 true가 나옴 ( 왜 그런지 파악하지 못했음)
- 빈 배열을 많이 선언해서 메모리 누수가 있고 속도도 느림
사용한 js 문법
number.toString()
= int → str
array.length
= 길이 구하기
string.split()
= '123' → ['1','2','3']
array.pop()
= ['1','2','3'].pop() → '3'
array.join()
= ['1','2','3'].join('') → ['123']
다른 답변
인덱스로 비교
var isPalindrome = function(x) {
let str = x.toString();
let l = 0, r = str.length-1;
while (l < r) {
if (str[l] === str[r]) l++, r--;
else return false;
}
return true;
}
- 비교할 두 숫자의 인덱스를 접근
- 처음은
0
, 마지막은 length-1
- 각 인덱스로 구한 값을 비교한 다음
i는 1씩 + r은 1씩 -
reverse메서드 사용
var isPalindrome = function (x) {
return x.toString() === x.toString().split("").reverse().join("");
};
reverse
메서드로 뒤집어서 합친 다음 비교
숫자로 접근
var isPalindrome = function(x) {
const input = x;
if (x === 0) return true;
if (x < 0 || x % 10 === 0) return false;
let pop,
reverse = 0;
while (x != 0) {
pop = x % 10;
reverse = reverse * 10 + pop;
x = Math.floor(x / 10);
}
return input === reverse;
};
0
일떄는 무조건 true니 true 반환
음수
와 10으로 나누떨어지는 경우
는 무조건 false니 false 반환
- 제일 끝에 숫자를
나머지
를 이용해서 pop 메서드를 사용하지 않고 가져옴
reverse
변수를 이용해서 뒤집어진 숫자를 새로이 만들어준다.- 곱하기 10
을 통해서 한자리 앞으로 밀고 뒤에 새로이 들어갈 일의 자리를 만듦
Math.floor
를 통해서 한 자리씩 낮춘다.
let x = 12121
var isPalindrome = function (x) {
if (x < 0) {
return false
} else {
let strX = x.toString().split('')
let copyStrX = strX.slice()
let newArray = new Array
let i= 0
while( i <strX.length){
let popped = copyStrX.pop()
console.log(popped)
newArray.push(popped)
console.log(newArray)
i ++;
}
let ccX = strX.join()
let ccA = newArray.join()
if (ccX !== ccA) {
return false
} else {
return true
}
}
}
strX===newArray
를 했을 때 계속 결과가 false가 나와서 join을 하고 한 문자로 만들고 비교해보니 true가 나옴 ( 왜 그런지 파악하지 못했음)사용한 js 문법
number.toString()
= int → strarray.length
= 길이 구하기 string.split()
= '123' → ['1','2','3']array.pop()
= ['1','2','3'].pop() → '3'array.join()
= ['1','2','3'].join('') → ['123'] 인덱스로 비교
var isPalindrome = function(x) {
let str = x.toString();
let l = 0, r = str.length-1;
while (l < r) {
if (str[l] === str[r]) l++, r--;
else return false;
}
return true;
}
- 비교할 두 숫자의 인덱스를 접근
- 처음은
0
, 마지막은length-1
- 각 인덱스로 구한 값을 비교한 다음
i는 1씩 + r은 1씩 -
reverse메서드 사용
var isPalindrome = function (x) {
return x.toString() === x.toString().split("").reverse().join("");
};
reverse
메서드로 뒤집어서 합친 다음 비교
숫자로 접근
var isPalindrome = function(x) {
const input = x;
if (x === 0) return true;
if (x < 0 || x % 10 === 0) return false;
let pop,
reverse = 0;
while (x != 0) {
pop = x % 10;
reverse = reverse * 10 + pop;
x = Math.floor(x / 10);
}
return input === reverse;
};
0
일떄는 무조건 true니 true 반환음수
와10으로 나누떨어지는 경우
는 무조건 false니 false 반환- 제일 끝에 숫자를
나머지
를 이용해서 pop 메서드를 사용하지 않고 가져옴 reverse
변수를 이용해서 뒤집어진 숫자를 새로이 만들어준다.-곱하기 10
을 통해서 한자리 앞으로 밀고 뒤에 새로이 들어갈 일의 자리를 만듦Math.floor
를 통해서 한 자리씩 낮춘다.
- 실제 실행 결과
reverse
는 점점 늘어나고x
는 점점 줄어든다.
Author And Source
이 문제에 관하여(1일 1코딩 - leetcode 9.isPalindrome), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nellholic108/1일-1코딩-leetcode-9.isPalindrome저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)