每日一道力扣题Day02:回文数

哈喽哈喽大家 好久不见 虽然说着是每日 但我实在懒 今天才做第二篇 以后会努力多多更新的!

方法一:数字反转

1、整体思路:将数字的各个位数遍历倒转之后对比是否相等

2、简单好理解 不涉及什么复杂知识点 只需要搞清楚除余和除的区别 合理应用即可

3、优缺点分析:用时短 但内存消耗大

下面展示C++方法主体代码~

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        long long original = x;//原数
        long long reversed = 0;//换位置之后的数
        while (x!= 0) {
            reversed = reversed * 10 + x % 10; //通过遍历调换位置
            x /= 10;
        }
        return original == reversed;
    }
};

方法二:转换成字符串

1、解题思路:将x转换为字符串 通过遍历字符串的方法来核对从前到后和从后往前的数是否一致

2、涉及方法

①C++中的str[index]方法:通过下标访问字符串(或数组)中的元素,index是下标

3、优缺点分析:耗内存且速度慢 不推荐~

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) {
            return false;
        }

        std::string str = std::to_string(x);//转换成字符串类型
        int left = 0;
        int right = str.size() - 1;//定义左右下标

        while (left < right) {
            if (str[left]!= str[right]) {
                return false;
            }
            left++;
            right--;//left实现从前往后的遍历 right实现从后往前的遍历
        }
        return true;
    }
};

方式三:后半部分翻转(python)

这里再给出一个用python写的翻转后半部分的解法~

1、解题思路:利用x偶位数 后半部分翻转对称 x奇位数 关于中间的数对称来解

2、优缺点分析:耗时多 占内存也比较多 

class Solution(object):
    def isPalindrome(self, x):
        //x % 10 == 0 and x!= 0表示以0结尾的十位数 如20、30
        if x < 0 or (x % 10 == 0 and x!= 0):
            return False
        reverted_number = 0
        while x > reverted_number:
            reverted_number = reverted_number * 10 + x % 10
            x //= 10
        return x == reverted_number or x == reverted_number // 10 
        //如果x的位数是偶数 那么原数是对称的 利用x>reverted_number限制一下 结束循环时x==reverted_number
        //如果x的位数是奇数 那么x的首位数应该和尾位相同 即reverted_number的位数与剩余的x相同

今天的分享就到这里啦~有问题欢迎大家在评论区交流哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值