力扣 题目09-回文数 心得

  • 题目


  • 题解


    这题很容易想到把整形转换成字符串然后以中间分割 不断延伸至左右比较即可

  • 但是进阶里要求我们不用字符串 那么我们应该想一下其他方法

  • 观察回文数可以发现 回文数逆向排序后和原本的数 一样 正好在07题学过整数反转拿来用就是(注意:题目要求负数 都不是 而且不要超过int界限)

  • 这种方法确实可以 但可以更近一层

  • 我们是不是以中心分割开,将整数分成前半部分和后半部分,然后逆向排序前半和后半比较(),不就可以了

  • 以12321为例 12是前半 21是后半 12逆向排序后是21和后半相等

  • 所以我们可以改成这样写法

  • 代码


  • 方法1(全部逆向排序)

  • #include<iostream>
    using namespace std;
    class Solution {
    public:
        bool isPalindrome(int x) {
            int ti = x;
            bool huiwen = false;
            int add = 0;
            if (x < 0) {
                return false;
            }
            for (int i=0; ti > 0;i++) {
                int shu = ti % 10;
                ti = ti / 10;
                if (add > INT_MAX / 10) {
                    return 0;
                }
                add = add * 10 + shu;
            }
            if (add == x) {
                return true;
            }
            else {
                return false;
            }
        }
    };
    int main() {
        Solution p;
        int aa = 1234567899;
        bool huiwen=p.isPalindrome(aa);
        cout << huiwen << endl;
    }

    方法2(前半部分逆向排序)

  • #include<iostream>
    using namespace std;
    class Solution {
    public:
        bool isPalindrome(int x) {
            int wei = 0;
            int ti = x;
            int qian = 0;
            int hou = 0;
            int ping = 0;
            if (x < 0) {//小于0直接返回0
                return 0;
            }
            for (; ti > 0; wei++) {//得到x有多少位
                ti = ti / 10;
            }
            if (wei % 2 == 0) {//判断是奇还是偶 偶数不需要舍弃中间值 奇数需要舍弃
                int a=pow(10, wei / 2);
                qian = x / a;
                hou = x % a;
                
            }
            else {
                int a = pow(10, wei / 2);
                qian = x / (a*10);
                hou = x % a;
            }
            for (int i = 0; i < wei / 2;i++) {//逆向输出前半给ping 
                int qian2 = qian % 10;
                qian = qian / 10;
                ping = ping * 10 + qian2;
            }
            if (ping == hou) {//判断是否相等
                return 1;
            }
            return 0;
        }
    };
    int main() {
        Solution p;
        int aa = 1111;
        bool huiwen=p.isPalindrome(aa);
        cout << huiwen << endl;
    }
  • 心得


     

posted @ 2022-03-25 14:10  无聊的阿库娅  阅读(25)  评论(0编辑  收藏  举报