zoukankan      html  css  js  c++  java
  • 7:整数反转(C++)

    题目地址https://leetcode-cn.com/problems/reverse-integer/

    题目描述

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    题目示例

    示例 1:

    输入: 123
    输出: 321
    示例 2:

    输入: -123
    输出: -321
    示例 3:

    输入: 120
    输出: 21
    注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    解题思路

    思路1:逆序累加处理,需要注意的是逆序结果可能出现溢出情况,为避免此种情况,使用long long类型存储反转结果,并对大于上限和下限值返回0,同时,因为负数取模结果还是负数,所以无需额外处理,时间复杂度O(logn)。

    思路2:整数转换字符串处理,利用to_strin()函数将整数x转换为字符串s,然后使用反转函数reverse()将除过符号位的数字进行反转,最后进行溢出判断即可。

    程序源码

    思路1

    class Solution {
    public:
        int reverse(int x) {
            long res = 0;
            while(x)
            {
                res = res *10 + x % 10;
                x /= 10;
            }
            if(res < INT_MIN || res > INT_MAX) return 0;
            return res;
        }
    };

    思路2

    class Solution {
    public:
        int reverse(int x) {
            long res;
            string s = to_string(x);
            int pos = s.find_first_not_of('-'); //在字符串s中寻找第一个不以'-'字符开始的位置
            std::reverse(s.begin() + pos, s.end()); //对字符串是种除符号位的其它字符进行反转操作,
            istringstream cout(s);
            cout >> res; //将string类型反转结果转换为long类型并输出到res中
            if(res > INT_MAX || res < INT_MIN) return 0; //溢出判断
            return res;
        }
    };
    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    inotifywait 目录或文件的监控
    outlook邮件中样式问题
    IE8兼容问题
    12px以下字体显示问题
    box-shadow
    cropper.js图片裁剪
    利用vcard和qrcode.js生成二维码导入联系人
    使用link rel="shortcut icon"为网页标题加图标
    将input或textarea设置为disabled的样式问题
    img没有src属性时自动出现边框
  • 原文地址:https://www.cnblogs.com/wzw0625/p/13414106.html
Copyright © 2011-2022 走看看