Leetcode9_回文数

哈哈哈哈哈哈哈太开心了,今天的代码耗时和内存消耗比官方少了一半哈哈

(因为官方用C#写的,我用C++,手动狗头)

 

题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true
示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

 

思路

  1. 负数肯定不可能
  2. 个位数可以
  3. 这种末尾是0的也不行:10,120,130
  4. 偶数反转:1221,只要证明21,反过来是12,即可,相当于只证明一半
  5. 奇数反转:121,也是证明21,反过来是12就行,只是中间的2多算了下

 

自己代码

自己根据官方想法写的C++

 1 class Solution {
 2 public:
 3     bool isPalindrome(int x) {
    //5,6,7行可以合并
    //合并为下面的官方代码所示
    //原因在于0%10==0
    //所以官方代码排除了0%10也=0的情况
4 int a = 0; 5 if (x == 0) 6 return true; 7 else if (x < 0 || x % 10 == 0) 8 return false; 9 while(x > a){ 10 a = a * 10 + x % 10; 11 x/=10; 12 }
    //若是偶数的话,则x==a
    //若是奇数的话,此时x=1,a=12,因为中间都是2重复,所以把2给去掉,就是a/10
    //最后x==a或x==a/10的话,说明是true
13 return x == a || x == a / 10; 14 } 15 };

 

官方代码

C#

 1 public class Solution {
 2     public bool IsPalindrome(int x) {
 3         // 特殊情况:
 4         // 如上所述,当 x < 0 时,x 不是回文数。
 5         // 同样地,如果数字的最后一位是 0,为了使该数字为回文,
 6         // 则其第一位数字也应该是 0
 7         // 只有 0 满足这一属性
 8         if(x < 0 || (x % 10 == 0 && x != 0)) {
 9             return false;
10         }
11 
12         int revertedNumber = 0;
13         while(x > revertedNumber) {
14             revertedNumber = revertedNumber * 10 + x % 10;
15             x /= 10;
16         }
17 
18         // 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
19         // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
20         // 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
21         return x == revertedNumber || x == revertedNumber/10;
22     }
23 }

 

 还可以用字符串写法, 改天再写吧

哇,现在还是没完成今天写3道题,相当于今天还有两道没完成,等到明天又是要写三道题5555

转载于:https://www.cnblogs.com/vocoub/p/11560369.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值