9.回文数
作者:互联网
一、转字符串
我上来就是一个转字符串,很快啊,面试官:你回去等通知吧,下一位。
class Solution { public boolean isPalindrome(int x) { String s = String.valueOf(x); int left = 0; int right = s.length() - 1; while (left < right) { if (s.charAt(left) != s.charAt(right)) { return false; } left++; right--; } return true; } }
二、数学
使用数学方法解决这个问题,也可以用反转字符串的思路,反转数字就可以了啊,比如321123,反转后是321123相等,是回文数,但是需要比较的只要一半,而且反转后可能出现整数溢出的问题,所以可以优化为反转后一半,和前一半做比较,123反转后是321,和321123前三位比较相等。
那么问题就转化为如何得到一个数字的后一半并且反转它,同时得到该数字的前一半。
首先我们处理几个边界问题,负数必然不是回文数,最后一位为0也必然不是,直接false。
众所周知,取出一个数字每一位,对10取余然后除以10就行(刚接触编程时老师就讲过的),有这个知识就很简单了,比如321123,对10取余得到3,然后除以10得到32112,假设reverse = 3,得到3,然后再对32112取余得到2,此时reverse = reverse * 10 + 2得到32,继续下去,会得到321,直到前半部分数字小于等于后半部分就结束,如何理解呢,当这个数字是偶数位时,前半和后半位数肯定相等,假如是奇数,那么取到后半多前半一位,比较的时候去掉后半部分最后一位就可以了。
class Solution { public boolean isPalindrome(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) { return false; } int reverse = 0; while (x > reverse) { reverse = reverse * 10 + x % 10; x /= 10; } return x == reverse || x == reverse / 10; } }
原文:https://leetcode.cn/problems/palindrome-number/solution/by-nice-hermann9a2-6lkv/
标签:10,right,return,reverse,int,反转,回文 来源: https://www.cnblogs.com/liangren-na/p/16437660.html