[LeetCode] #9 Palindrome Number

本文介绍了 LeetCode 上的回文数问题,并提供了两种不同的解决方案。一种是通过计算位数并逐一比较来判断是否为回文数,另一种则是通过反转数字进行比较。文章还分享了作者在解决过程中遇到的问题及优化过程。


好久没有刷题了,现在开始刷LeetCode 

GitHub : https://github.com/MummyDing/LeetCode

Source : https://leetcode.com/problems/palindrome-number/

Description :

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


题解:  题目描述非常简单,就是判断一个整数是否为回文数,但是有一个要求,不能使用额外的内存. 开始看到这题我还真以为一丁点多余的内存都不能使用,但是判断它是否回文要么首先反转再比较,要么知道位数一位一位比较. 如果一丁点多余的内存都不能又,那前者肯定不行,于是我考虑后面的情况,首先要求出位数,这个简单,但是位数怎么保存是个问题.我的解决方法是将原数字扩大十倍,将位数存储到各位.就这样,没有花费额外的储存空间写了一个解决方法.提交 WA,很显然,是超出整形范围了. 后来才知道,它这里指的花费多余存储是想不使用 字符串 数组 之类的东西,多几个变量是没关系的.理解这点后,我给出了一下解法:

/*
Problem: Palindrome Number
Description: https://leetcode.com/problems/palindrome-number/
Author: MummyDing
Date : 2015-12-27
Run Time: 156 ms
*/

#include <iostream>

using namespace std;

class Solution {
public:
    bool isPalindrome(int x) {
        int count = 1,tmpX = x;
        if(x < 0) return false;
        if(x < 10) return true;

        while(tmpX >= 10){
            tmpX /= 10;
            count ++;
        }
        for(int i = 0 ; i<count/2 ;i++){
            if((x/pow10(count-i-1))%10 != (x/pow10(i))%10)
            return false;
        }
        return true;
    }
    int pow10(int p){
        int sum = 1;
        while(p){
            sum *=10;
            p--;
        }
        return sum;
    }
};


花费了156 ms ,平均水平都没达到,效率太低.

再换

/*
Problem: Palindrome Number
Description: https://leetcode.com/problems/palindrome-number/
Author: MummyDing
Date : 2015-12-28
Run Time: 84 ms
*/

#include <iostream>

using namespace std;

class Solution {
public:
    bool isPalindrome(int x) {
       if(x < 0 ) return false;
       if(x < 10) return true;
       if(x %10 ==0 ) return false;
       int reverseX = 0 , tmpX = x;
       while(tmpX){
            reverseX =  reverseX * 10 + tmpX %10;
            tmpX /= 10;
       }
       if(reverseX == x) return true;
       return false;
    }
};

84 ms 只有之前一半多点,平均水平之上.

思路: 一位数 负数 什么的直接可以判断了. 否则再看各位数是否为0,为0 肯定不是. 最后将数字反转即可判断是否回文.

84ms 还没进入前30%,但是暂时没有想到可以再优化的地方,看到最快的有 64 ms 的. 我用Java字符串做,13ms(显然违规lol)





乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值