重庆建筑模板,做网站建设优化的电话话术,百度问答seo,鲜花店网站建设给你一个整数 x #xff0c;如果 x 是一个回文整数#xff0c;返回 true #xff1b;否则#xff0c;返回 false 。
回文数
是指正序#xff08;从左向右#xff09;和倒序#xff08;从右向左#xff09;读都是一样的整数。
例如#xff0c;121 是回文#xff0c…给你一个整数 x 如果 x 是一个回文整数返回 true 否则返回 false 。
回文数
是指正序从左向右和倒序从右向左读都是一样的整数。
例如121 是回文而 123 不是。
示例 1
输入x 121
输出true示例 2
输入x -121
输出false
解释从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3
输入x 10
输出false
解释从右向左读, 为 01 。因此它不是一个回文数。提示
-231 x 231 - 1
进阶你能不将整数转为字符串来解决这个问题吗
我的解题思路1 将整数转为字符串-将字符串反转-判断反转后的字符串是否与之前字符串相同如果相同则是回文数否则不是回文数。 思路1代码
class Solution {public boolean isPalindrome(int x) {String original x;StringBuilder sb new StringBuilder(original).reverse();String s sb.toString();if (original.equals(s))return true;return false;}
}思路2 将整数转为字符串-分别定义一个下标指向字符串头和尾以此对比头和尾所指字符是否相同如果不同则返回false直到头下标超过尾下标表示是回文数返回true 思路2代码
class Solution {public boolean isPalindrome(int x) {String s x ;int left 0, right s.length()-1;// left指向开始字符right指向结尾字符while(leftright){if(s.charAt(left)!s.charAt(right))return false;// 头和尾不相同返回falseleft;right--;}// 一直没有不相同的返回truereturn true;}
}结果 思路三直接利用整数运算进行操作 如果小于0肯定不是回文数 对整数进行尾部取余然后算出反转后的数比较是否相等如果相等则是回文数否则不是 代码
class Solution {public boolean isPalindrome(int x) {// 负数直接返回falseif(x0)return false;// 使用long类型防止反转后的数值溢出int型数据long reverse 0;int original x;while(x!0){reverse reverse*10 x%10;x x/10;}if(reverseoriginal)return true;return false;}
}结果 和上述同样的逻辑。只是在防止反转后数值溢出处理使用了判断逻辑判断int型溢出逻辑可以查看我的第8题讲解文章即在计算之前判断是否大于int的最大值/10以及再计算之后的值是否小于0。 修改后代码如下节省了4个字节的内存
class Solution {public boolean isPalindrome(int x) {// 负数直接返回falseif(x0)return false;// 使用long类型防止反转后的数值溢出int型数据int reverse 0;int original x;while(x!0){if(reverse Integer.MAX_VALUE/10)return false;reverse reverse*10 x%10;if(reverse 0)return false;x x/10;}if(reverseoriginal)return true;return false;}
}总结 字符串反转问题可以将String类型变量转成StringBuilder然后调用reverse()进行反转最后使用toString()方法转回String类型。 字符串如何转成字符数组s.toCharArray()函数。 从上述结果也可以看出字符串处理是速度较慢的计算机对于数值计算较快。