每日一算法(回文数)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、字符串解法(暴力解法)
  • 二、数学解法(1)
  • 三、数学解法(2)


前言

提示:这里可以添加本文要记录的大概内容:

  • 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
  • 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

一、字符串解法(暴力解法)

  • 实现思路:使用springBuilder 字符串进行一个反转

    /**
     * 回文数 字符串的解决办法
     * @param x 数字
     * @return ture or false
     */
    public static boolean isPalindromeString(int x) {
        String str = String.valueOf(x);
        StringBuilder builder = new StringBuilder(str).reverse();
        return builder.toString().equals(str);
    }

二、数学解法(1)

  • 思路
    • 根据数字就算进行区分和这个是不是一个回文数
    • 先检查一下 x是不是0 又或者x%10是否是0如果符合条件的话那么这个数字肯定不是回文数
    • palindromedNumber < 小于originalNumber的话进行一个循环计算
    • 目的是将输入的整数x拆分成一个个位数,并重新组合成一个新的数,保存在变量palindromedNumberc中
    • 循环结束后,如果palindromedNumberc等于originalNumber,或者originalNumber等于palindromedNumberc除以10(这意味着x的位数是奇数),那么这个数就是一个回文数,方法返回true
    public static boolean isPalindromesChar1(int x) {
        //数字计算后
        int palindromedNumber = 0;
        int originalNumber = x;
        //检查x 是否小于0 || x对10取余==0并且x不等于0
        if (x < 0 || x % 10 == 0 && x != 0) {
            return false;
        }
        while (originalNumber > palindromedNumber) {
            // 将数字计算后和和x的结果进行相加 然后更新palindromedNumberc的数据
            palindromedNumber = (palindromedNumber * 10) + (originalNumber % 10);
            // 将originalNumber 除以 10
            originalNumber /= 10;
        }
        //如果相等,则返回true;否则返回false。
        return (originalNumber == palindromedNumber || originalNumber == palindromedNumber / 10);
    }

三、数学解法(2)

  • 思路:
    • 这个方法检查输入的整数x是否小于0,或者x对10取余等于0并且x不等于0。如果满足这些条件,那么这个数就不是一个回文数,方法直接返回false
    • 这个方法进入一个while循环,目的是将输入的整数x翻转。具体做法是不断地将x的最后一位取出来,加到palindromedNumber上,然后将x除以10,去掉最后一位。
    • 循环结束后,这个方法将翻转后的数字palindromedNumber与原数字x进行比较。如果它们相等,那么这个数就是一个回文数,方法返回true。否则,这个数就不是一个回文数,方法返回false。
    • 直接翻转了数字并进行了比较
    public static boolean isPalindromesChar2(int x) {
        //数字翻转后
        int palindromedNumber = 0;
        //数字翻转前
        int originalNumber = x;
        //检查x 是否小于0 || x对10取余==0并且x不等于0
        if (x < 0 || x % 10 == 0 && x != 0) {
            return false;
        }
        while (originalNumber!=0) {
            // 将翻转前和翻转后的结果进行相加 然后更新反转后的数据
            palindromedNumber = (palindromedNumber * 10) + (originalNumber % 10);
            // 将翻转前的数据针对10座取余
            originalNumber /= 10;
        }
        //如果相等,则返回true;否则返回false。
        return (x == palindromedNumber);
    }

你可能感兴趣的:(算法练习,算法)