반응형
Problem
https://leetcode.com/problems/palindrome-number/description/
Solution
class Solution {
public boolean isPalindrome(int x) {
String[] arr = Integer.toString(x).split("");
if(x < 0){
return false;
}
else{
if(arr.length == 1){
return true;
}
else if(arr.length % 2 == 1) {
for (int i = 1; i <= arr.length / 2; i++) {
if(!arr[arr.length / 2 - i].equals(arr[arr.length / 2 + i])){
return false;
}
}
}
else{
if(arr.length < 3){
return (arr[0].equals(arr[1])) ? true : false;
}
else{
for(int i=1; i<=arr.length/2; i++){
if(!arr[arr.length/2-i].equals(arr[arr.length/2+i-1])){
return false;
}
}
}
}
}
return true;
}
}
Result
시간 복잡도
Comment
별다른 테크닉 없이 입력값의 숫자 자릿수를 기준으로 모든 경우의 수를 찾아서 조건 별로 나누어 풀이하였다.
이번에도 문제 하단 follow-up 을 보면 int 를 string 으로 안 바꾸고 풀 수 있냐고 물어보는데 또 뜨끔하게 된다.
(더 좋은 풀이)
class Solution {
public boolean isPalindrome(int x) {
String s = String.valueOf(x); // Convert to String
int n = s.length(); // Store the String length to int n
for (int i=0; i<n/2; i++) {
// We check whether the elements at the same distance from
// beginning and from ending are same, if not we return false
if (s.charAt(i) != s.charAt(n-i-1)) return false;
}
// if no flaws are found we return true
return true;
}
}
밑에 코드는 follow-up 대로 int 를 string 으로 형변환하지 않고 한 풀이이다.
class Solution {
public boolean isPalindrome(int x) {
int xO = x, xN = 0;
while(x>0){
int R = x%10;
xN = xN*10 + R;
x = x/10;
}
if (xO == xN) return true;
return false;
}
}
(출처 : https://leetcode.com/problems/palindrome-number/solutions/3213890/fastest-java-solution/)
반응형
'개발 ━━━━━ > Algorithm' 카테고리의 다른 글
[LeetCode/Java] 1. Two Sum (easy) (0) | 2023.08.16 |
---|