00003-回文数的判定-leetcode-解法不唯一,1.reverse最简单,2.数学方法很有意思

回文数的判定

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121 输出: true

示例 2:

输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:

你能不将整数转为字符串来解决这个问题吗?(采用数学方法进行判断)

//解法1,直接StringBuffer的reverse反转方法反转,在进行equals进行判断
    public boolean isPalindrome(int x) {

        boolean flag = false;

        String string = x + "";
        String reverse = new StringBuffer(string).reverse().toString();
        //用字符串equals方法判断这两个字符串是否相等
        if (string.equals(reverse)) {

            flag = true;
        }
        return flag;
    }

解释:
1.整数转字符串可以使用:String string=整数num+"" ,这样就能将整数转换为字符串,用字符串中的方法了。

关于整数和字符串的转换可以参考这篇博客

2.StringBuffer的构造函数参数可以是String,StringBuffer包含一个reverse的方法(反转)

//解法2.通过取整和取余操作获取整数中对应的数字进行比较。
public boolean isPalindrome(int x) {

         //边界判断
        if (x < 0) return false;	 //负数肯定不是回文数,比如-1,反转之后就是1-   不满足题中条件
        int div = 1;
       
        while (x / div >= 10) div *= 10;
        while (x > 0) {
            int left = x / div;
            int right = x % 10;
            if (left != right) return false;
            x = (x % div) / 10;
            div /= 100;
        }
        return true;
    }

解释:

1.比如1221,第一个while循环的时候div结果是1000,这个div算是一个中间变量,可以通过它得到整数最高位和最低位。

2.那么在第二个循环while中第一次循环left为1221/1000,right为1221%10,x = (x % div) / 10;算是掐头去尾,将1221中最高位和最低位的1去掉,x的值位22,很有意思叭,div/=100,接着继续循环
(此算法非原创,来自leetcode题解-作者:程序员小吴)

发布了46 篇原创文章 · 获赞 0 · 访问量 899

猜你喜欢

转载自blog.csdn.net/qq_33820545/article/details/103544247
今日推荐