- 프로그래밍 처음 시작할 때, 막 풀었던 것보다 코드도 깨끗해지고 퍼포먼스도 훨씬 올라가서 나름 좋았다.
3번에 걸쳐서 리팩토링 했고, 최대 퍼포먼스 뽑아냄
하지만 개인적으로는 2번째 코드가 좀 더 정리하면 가장 읽기 편할 것으로 보여서 좋아보인다.
package algorithm_sites.leetcode;
public class LC_0007_ReverseInteger {
public int reverse_3(int x) {
if (x == 0) {
return 0;
}
boolean isPositive = x > 0;
int result = 0;
int pop;
try {
while (x != 0) {
pop = x % 10;
x /= 10;
if (isPositive && result > (Integer.MAX_VALUE - pop) / 10) {
return 0;
}
if (!isPositive && result < (Integer.MIN_VALUE - pop) / 10) {
return 0;
}
result = (result * 10 + pop);
}
} catch (NumberFormatException e) {
return 0;
}
return result;
}
public int reverse_2(int x) {
if (x == 0) {
return 0;
}
boolean isPositive = x > 0;
StringBuilder sb = new StringBuilder(Integer.toString(Math.abs(x))).reverse();
int result;
try {
result = Integer.parseInt(sb.toString());
if (!isPositive) {
return result * -1;
}
return result;
} catch (NumberFormatException e) {
return 0;
}
}
public int reverse_1(int x) {
if (x == 0) {
return 0;
}
boolean isPositive;
if (x > 0) {
isPositive = true;
} else {
isPositive = false;
}
StringBuilder sb = new StringBuilder();
while (x != 0) {
int temp = x % 10;
sb.append(Math.abs(temp));
x /= 10;
}
try {
int result = Integer.parseInt(sb.toString());
if (!isPositive) {
return result * -1;
}
return result;
} catch (NumberFormatException e) {
return 0;
}
}
public static void main(String args[]) {
LC_0007_ReverseInteger leet = new LC_0007_ReverseInteger();
int reverse = leet.reverse_3(-321);
System.out.println(reverse);
}
}