整数反转
题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
解题思路
x%10 取一位,x/10下一位,注意越界,
代码实现
class Solution {
public:
int reverse(int x) {
int sum = 0;
while(x)
{
if(sum<INT_MIN/10)
return 0;
if(sum>INT_MAX/10)
return 0;
sum=sum*10+x%10;
x/=10;
}
return sum;
}
};
字符串转整数
题目描述
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
说明:
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
解题思路
第一步
去除字符串中的所有空格,只记录有效字符的下标
如果都是空格,就直接返回0
int length = s.size();
int index = 0;
while(index < length)
{
if(s[length] != ' ')
break;
index++;
}
if(index == length)
return 0;
第二步
判断正负,用个标记为来表示,起初为正
int signal = 1;
if(s[index] = '+')
index++;
else if(s[index] = '-')
{
singal = -1;
index++;
}
第三步
转换,首先判断是否越界,再进行转换,
int res = 0; //保存结果
while(index<legnth)
{
//1.取一个字符
char Cur = s[index];
//2.判断是否为数字字符
if(Cur < '0' || Cur >'9')
break;
//3.判断是否越界
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && (curChar - '0') > INT_MAX % 10))
{
return INT_MAX;
}
if (res < INT_MIN / 10 || (res == INT_MIN / 10 && (curChar - '0') > -(INT_MIN % 10)))
{
return INT_MIN;
}
//4.转换
res = res*10 + signal*(Cur - '0');
//5.取下一个字符
index++;
}
代码实现
class Solution {
public:
int myAtoi(string str) {
unsigned long len = str.length();
int index = 0;
while (index < len) {
if (str[index] != ' ') {
break;
}
index++;
}
//如果全部是空格,直接返回0
if (index == len) {
return 0;
}
int sign = 1;
if (str[index] == '+') {
index++;
} else if (str[index] == '-')
{
sign = -1;
index++;
}
int res = 0;
while (index < len) {
char curChar = str[index];
if (curChar < '0' || curChar > '9') {
break;
}
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && (curChar - '0') > INT_MAX % 10)) {
return INT_MAX;
}
if (res < INT_MIN / 10 || (res == INT_MIN / 10 && (curChar - '0') > -(INT_MIN % 10))) {
return INT_MIN;
}
res = res * 10 + sign * (curChar - '0');
index++;
}
return res;
}
};