前期回顾
今天又刷了一波leetcode
配合博客与GitHub记录自己的解题之路
具体代码可以在GitHub中git clone下来自己提交
GitHub地址(持续更新,欢迎star)
前面的刷题详见博客
LeetCode0001.两数之和
LeetCode0007整数反转
题目描述
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
python3解法
- 解法1
class Solution:
def myAtoi(self, s: str) -> int:
return max(min(int(*re.findall('^[\+\-]?\d+', s.lstrip())), 2**31 - 1), -2**31)
- 解法2
class Solution:
def myAtoi(self, str: str) -> int:
sign=1
str=str.strip()
if not str:
return 0
if str[0]=="+" or str[0]=="-":
if str[0]=="-":
sign=-1
str=str[1:]
ans=0
for i in str:
if i.isdigit():
ans=ans*10+int(i)
else:
break
ans*=sign
if ans>2147483647:
return 2147483647
elif ans<-2147483648:
return -2147483648
else:
return ans
- 解法3
import re
class Solution:
def myAtoi(self, s: str) -> int:
if not s or s == '' or s.strip() == '':return 0
s = s.strip()
pattern = re.compile(u"^[-,+]?\d+")
ret = pattern.findall(s)
if len(ret)==0:return 0
if len(ret)==1:
if int(ret[0]) < -2 ** 31:
return -2 ** 31
if int(ret[0]) > 2 ** 31 - 1:
return 2 ** 31 - 1
return int(ret[0])
C++解法
class Solution {
public:
int myAtoi(string str) {
long result = 0;
bool isUint = true;
bool isStart = true;
for (int i =0; i < str.size(); ++i) {
if (str[i] == ' ' && isStart) {
continue;
} else if (str[i] == '-' && isStart) {
isStart = false;
isUint = false;
} else if (str[i] == '+' && isStart) {
isStart = false;
isUint = true;
}else if (str[i] >='0' && str[i] <='9') {
isStart = false;
result = result*10 + (str[i]-'0');
if (result != (int)result){
if (isUint) {
return INT_MAX ;
} else {
return INT_MIN ;
}
}
} else {
break;
}
}
if (!isUint) {
result = 0-result;
}
return result;
}
};
JavaScript解法
var myAtoi = function(str) {
str = str.trim()
var num = parseInt(str, 10)
if (num > Math.pow(2, 31) -1) {
return Math.pow(2, 31) -1
}
if (num < -Math.pow(2, 31)) {
return -Math.pow(2, 31)
}
return isNaN(num) ? 0 : num
};