zoukankan      html  css  js  c++  java
  • LeetCode(C++)刷题计划:9-回文数

    9-回文数

    @Author:CSU张扬
    @Email:csuzhangyang@gmail.com or csuzhangyang@qq.com

    1. 题目

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

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

    进阶:
    你能不将整数转为字符串来解决这个问题吗?

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/palindrome-number

    2. 解法

    2.1 解法一

    1. 我们将该数字翻转得到的数字和原数字相等,此时它就是回文数。

    2. 考虑翻转后会溢出的问题,我们设置翻转后的数字设置为long类型即可。

    3. 当然2中方法并不适用所有情况,我们可以使用以下方法判断.

      if (reverse > INT_MAX / 10 || (reverse >= INT_MAX && (temp % 10) > 7))
          return false;
      

    执行用时: 4 ms, 在所有 cpp 提交中击败了99.52%的用户
    内存消耗: 7.9 MB, 在所有 cpp 提交中击败了95.45%的用户

    class Solution {
    public:
        bool isPalindrome(int x) {
            if (x < 0)
                return false;
            int temp = x;
            long reverse = 0;
            while (temp) {
                reverse = reverse * 10 + temp % 10;
                temp = temp / 10;
            }
            return (reverse == x);
        }
    };
    

    2.2 解法二

    1. 我们没有必要将整个数字翻转,只需要将后一半数字反转,再与前一半的数字相比较即可。
    2. 例如1234321,后一半的数是321,翻转得到123,前一半的数是123,两者相等,则是回文数。
      需要注意奇回文数和偶回文数的处理。

    执行用时: 16 ms, 在所有 cpp 提交中击败了75.83%的用户
    内存消耗: 8.1 MB, 在所有 cpp 提交中击败了82.64%的用户

    class Solution {
    public:
        bool isPalindrome(int x) {
            int digit = 0;
            if (x < 0)
                return false;
            int temp = x;
            while (temp) {
                temp = temp /10;
                digit ++;
            }
            int left = 0, right = 0;
            left = x / pow(10, (digit + 1) / 2);
            for (auto i = 0; i < digit / 2; ++ i) {
                right = right * 10 + x % 10;
                x = x / 10;
            }
            return (left == right ? true : false);
        }
    };
    
  • 相关阅读:
    Reverse题的tips
    电子公文传输系统 团队作业(五):冲刺总结(第三天)
    webrtc sdp(会话传输协议)详解
    CentOS新系统开启网络
    FreeSWITCH Cookbook
    NetEngine AR V300R019 配置指南-IP业务(命令行)—— NAT
    将md(markdown)文件导出成pdf的最简单办法
    liblinear
    Accelerometer, Gyroscope, and Magnetometer Analysis with Matplotlib
    svmlight
  • 原文地址:https://www.cnblogs.com/MagicConch/p/12179161.html
Copyright © 2011-2022 走看看