力扣刷题第四天

7. 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

在这里插入图片描述

代码:

class Solution {
public:
    int reverse(int x) {
        int result = 0;
        int symbol = 1;
        if(x == -2147483648){//32位整数-2^31 <= x < 2^31
            return 0;
        }
        if(x < 0){//将负数的符号取出来
            symbol = -1;
            x = -x;
        }
        while(x>=1){
            int temp = x % 10;
            if(result > 214748364.7){
                return 0;
            }
            result = result * 10 + temp;
            x = x / 10;
        }

        return result * symbol;


    }
};

8. 字符串转换整数 (atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:(按此介绍写的代码)

读入字符串并丢弃无用的前导空格
检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
如果整数数超过 32 位有符号整数范围 [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [231,2311],需要截断这个整数,使其保持在这个范围内。具体来说,小于 − 2 31 −2^{31} 231的整数应该被固定为 − 2 31 −2^{31} 231,大于 2 31 − 1 2^{31} -1 2311 的整数应该被固定为 2 31 − 1 2^{31} -1 2311
返回整数作为最终结果。
注意:

本题中的空白字符只包括空格字符 ’ ’ 。
除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/string-to-integer-atoi
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

在这里插入图片描述
代码:

class Solution {
public:
    int myAtoi(string s) {
        string getNum = "";
        int sign = 1;//记录正负符号
        int result = 0;
        //提取数字
        for(int i=0; i<s.length(); i++){
            if(s[i] != ' '){
                if(s[i] == '-'){
                    if(i-1>=0 && s[i-1] >= '0' && s[i-1] <= '9'){//-号在数字之后
                        break;
                    }
                    if(s[i+1] >= '0' && s[i+1] <= '9'){//-号在数字之前
                        sign = -1;
                    } else {//-号既不在数字之后也不在数字之前
                        return 0;
                    }
                    
                } else if(s[i] >= '0' && s[i] <= '9'){
                    getNum += s[i];
                } else if(s[i] == '+'){//同-号
                    if(i-1>=0 && s[i-1] >= '0' && s[i-1] <= '9'){
                        break;
                    }
                    if(s[i+1] >= '0' && s[i+1] <= '9'){
                        sign = 1;
                    } else {
                        return 0;
                    }
                } else {//其他字符
                    break;
                }
            } else {
                if(i-1>=0 && s[i-1] >= '0' && s[i-1] <= '9'){//空格在数字之后
                    break;
                }
            }
        }
        //转换字符串为整型
        for(int i=0; i<getNum.length(); i++){
            int temp = getNum[i] - '0';
            if((result >= 214748364.8 || result + (double)temp / 10 >= 214748364.8) && sign == -1){//根据测试用例改的。。。都是泪
                return -2147483648;
            } else if ((result >= 214748364.7 || result + (double)temp / 10 >= 214748364.7) && sign == 1){
                return 2147483647;
            }
            result = result * 10 + temp;
        }
        return result * sign;
    }
};

KaTax公式

行内公式:$ $ 表达式在两个$之间,如$[−2^{31},  2^{31} − 1]$,$与式子之间无空格
行间公式:$$[−2^{31},  2^{31} − 1]$$

这是行内公式: [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [231,2311]
这是行间公式:
[ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [231,2311]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值