leetcode 9 Palindrome Number

本文介绍了一种优化的整数回文数判断算法,通过只反转一半的数来减少运算量,并详细解释了算法背后的逻辑和原理。

Palindrome
Number Total Accepted: 74363 Total Submissions: 261192

Determine whether an integer is a palindrome. Do this without extra space.

click to show spoilers.
Some hints:

Could negative integers be palindromes? (ie, -1)

If you are thinking of converting the integer to string, note the restriction of using extra space.

You could also try reversing an integer. However, if you have solved the problem “Reverse Integer”, you know that the reversed integer might overflow. How would you handle such case?

There is a more generic way of solving this problem.

这道题跟之前的球最长回文的关系其实不大,相反和前一题求一个数的反转更接近。这道题的思路很简单,和上一题类似,就是求这个数的反转,如果这个反转与原来的数相同,那么这个数本身就是一个回文。在这道题的讨论中看到一个这个算法的改进,原帖地址:https://leetcode.com/discuss/33500/an-easy-lines-code-only-reversing-till-half-and-then-compare ,即不用完全反转整个数,反转一半即可。

int num = 0;
while(x > num)
{
    num = num * 10 + x % 10;
    x = x / 10;
}
if(x == num / 10 || x == num)
    return true;
else
    return false;

这个地方其实比较巧妙,如果双数位数的回文数,例如:123321,那么将会以x=num退出,然后再后面的if语句中返回true;如果单数位数的回文数,例如:12321,那么将会以x < num退出,退出时x=12,num=123,但后面的if语句仍然可以返回true。而其他的偶数位数的数将会有两大类情况,例如123456,将会以x < num退出,x=123,num=654,此时x = num / 10 和 x = num均不可能满足,首先它们本身不相等,其次它们的位数相同,所以不可能相差10倍。另一类:654321,将会以x < num退出,x=65,num=1234,它们本身不相等,其次它们位数差2位,所以不可能差10倍。对于其他的奇数位数的情况,例如:12345(54321也是一样的情况),将会以x < num退出,x=12,num=543,它们的位数差1位,所以不可能相等,如果x=num/10,那么个数必然是回文,因为中间位不影响,num/10就是取前两位,前两位=后两位,当然是回文,所以x num/10;

另外要提一下可以有一个排除条件:如果这个数字是10的倍数,那么除了0以外,都不会是回文,这点很明显,int中10就是10,不能写成010.

下面是完整程序代码:

#include <iostream>
using namespace std;

bool isPalindrome(int x) 
{
    if(x<0 || x!=0 && x % 10 == 0)
        return false; 
    int num = 0;
    while(x > num)
    {
        num = num * 10 + x % 10;
        x = x / 10;
    }
    if(x == num / 10 || x == num)
        return true;
    else
        return false;
}


int main()
{
    int x; 
    cout<<"Input the number:"<<endl;
    cin>>x;

    cout<<isPalindrome(x)<<endl;
    return 0;
}
内容概要:本文档详细介绍了基于双向门控循环单元(BiGRU)的锂电池寿命预测项目的实现过程,涵盖了从项目背景、目标、挑战到具体实现的各个步骤。项目旨在通过深度学习技术提升锂电池寿命预测的精度和鲁棒性,以支持电池管理系统的优化。项目首先介绍了锂电池寿命预测的重要性及现有方法的局限性,随后提出了基于BiGRU模型的解决方案,重点描述了数据预处理、模型构建、训练过程、性能评估及GUI界面设计等环节。此外,文档还讨论了项目部署、应用领域及未来改进方向,强调了模型在电动汽车、储能系统、消费电子等多个领域的广泛应用前景。适用人群:具备一定编程基础,对深度学习和电池管理感兴趣的工程师和技术人员,特别是从事锂电池寿命预测研究和应用开发的专业人士。使用场景及目标:① 提升锂电池寿命预测的精度,支持电池管理系统的优化;② 提高模型对复杂电池行为的适应能力,增强预测鲁棒性;③ 降低维护成本,减少资源浪费;④ 推动锂电池寿命预测领域的技术创新,提供可扩展的技术平台;⑤ 实现端到端的自动化预测流程,促进学术与产业结合。其他说明:项目不仅提供了详细的代码实现和注释,还设计了精美的GUI界面,方便用户操作和结果展示。文档强调了模型在实际应用中的挑战及解决方案,如数据复杂多样性、电池老化机理的非线性、模型训练的计算资源需求高等,并通过引入多维传感数据融合、自适应动态序列输入设计、高效训练与推理优化等技术手段,提升了模型的性能和实用性。未来,项目计划引入注意力机制、多模态数据融合及迁移学习等先进技术,进一步增强模型的可解释性和泛化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值