题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解题思路
首先想到的是递归解决回文数问题,但是问题限制了只能方法的参数只有一个int型整数,所以无法使用:
这里分享一下递归解决回文数的方法:
//需要把题目中的整数转为字符串,并用数组表示,其中start初始为0,end初始为s.length()-1
public boolean isPalindrome(char[] s, int start, int end){
if(start>end){
return true;
}
if(s[start]==s[end]){
isPalindrome(s,start+1,end-1);
}
else{
return false;
}
}
这题只给了一个参数,所以题意不是想我们用递归的方法,而是通过反转的方法来判断。
本题的示例2告诉我们负数的负号也是要被反转的,也就是负数不可能成为回文数。所以我们可以把整数看作字符串,用字符串反转来解决。
看为字符串后方法可就多了,可以用StringBulider直接进行反转然后与原来比较,可以转为数组进行比较,也可以直接对字符串用charAt方法进行比较。
代码
class Solution {
public boolean isPalindrome(int x) {
String str = String.valueOf(x);
char[] num = str.toCharArray();
int len = num.length;
int i = 0;
while (i
if (num[i]!=num[len-1]) {
return false;
}
i++;
len--;
}
return true;
}
}
结论
总结了字符串反转的几种办法:
1.利用StringBuffer自带的reverse功能
String str = "12345";
StringBuffer sb = new StringBuffer(str);
String result = sb.reverse().toString();
2.转为字符型数组
String str = "12345";
char[] chars = str.toCharArray();
String reverse = "";
for (int i=chars.length-1; i>=0; i--){
reverse += chars[i];
}
3.利用String的CharAt方法来取出各个字符串中的各个字符
String str = "12345";
String reverse = "";
int length = str.length();
for (int i = 0; i
reverse = str.charAt(i) + reverse;
}
标签:reverse,Java,String,int,No9,str,字符串,LeetCode,回文
来源: https://blog.csdn.net/M_agic_/article/details/101197103