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,231−1],需要截断这个整数,使其保持在这个范围内。具体来说,小于
−
2
31
−2^{31}
−231的整数应该被固定为
−
2
31
−2^{31}
−231,大于
2
31
−
1
2^{31} -1
231−1 的整数应该被固定为
2
31
−
1
2^{31} -1
231−1。
返回整数作为最终结果。
注意:
本题中的空白字符只包括空格字符 ’ ’ 。
除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
来源:力扣(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,231−1]
这是行间公式:
[
−
2
31
,
2
31
−
1
]
[−2^{31}, 2^{31} − 1]
[−231,231−1]