leetcode 腾讯50题 6/50 回文数

本文探讨了如何判断一个整数是否为回文数,提供了两种解决方案:一是通过字符串转换和反转来判断;二是直接使用数学方法,避免了整数溢出问题。详细介绍了C++中的数字与字符串转换及字符串反转的实现。

题目描述

判断一个整数的字符串表示是否是回文串。

提示:

负数因为负号的存在,不是回文串;
如果用Reverse Integer 题目中的做法,需要避免整数溢出的问题;

思路

面对这道题,第一个想到了前文学过的回文串,可以先将数字转换位字符串,就变成了回文串的判断,在学习数字转字符串,学习了相关的函数的知识
首先推荐用用C++的stringstream。
主要原因是操作简单。
数字转字符串,int float类型 同理

#include <string>
#include <sstream>

int main(){
    double a = 123.32;
    string res;
    stringstream ss;
    ss << a;
    ss >> res;//或者 res = ss.str();
    return 0;
}
字符串转数字,int float类型 同理

```c
int main(){
    string a = "123.32";
    double res;
    stringstream ss;
    ss << a;
    ss >> res;
    return 0;
}

c++中字符串的反转

1.对于用char定义的字符串:使用string.h中的strrev函数
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char s[]="123456";//不能是string类型;
    strrev(s);
    cout<<s<<endl;
    return 0;
}

2.对于string类型的:使用algorithm中的reverse函数

#include<iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
    string s[]="123456";
    reverse(s.begin(),s.end());
    cout<<s<<endl;
    return 0;
}
class Solution {
public:
    bool isPalindrome(int x) {
        long res;//int翻转会溢出
        if(x<0) return false;//负数必然不是,直接排除
        string a = to_string(x);//转字符串
        std::reverse(a.begin(),a.end());//翻转字符串
        stringstream out(a);//将翻转的a的字符串读入,转化位数字,并读到res中
        out>>res;
        return x==res;//将翻转后数字与原数字做比较
     
    }
};

思路2

不用字符串,用数字的方法来做,考虑到数字翻转后会存在溢出情况,因此可以只翻转后半部分,将后半部分翻转后与前一部分比较,由于数字为数存在奇书和偶数两种情况,所以可能相等,可能相差10倍
代码如下

class Solution {
public:
    bool isPalindrome(int x) {
       if(x<0||(x&&x%10==0)) return false;//当负数,非零的10的整数都排除,都不可能是回文数
    int s=0;//翻转的数字
    while(s<=x){
        s=s*10+x%10;//从末尾往前遍历
        if(x==s||s==x/10) return true;//偶数位会相同,奇数位会s==x/10,相差10倍
        x=x/10;//删除位
    }
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值