8.字符串转换整数
解题:
class Solution {
public:
int myAtoi(string s) {
int i = 0;
while (i < s.size() && s[i] == ' ')i++; //过滤空格
string s1;
int k = 0;
if (i == s.size() || (!(s[i] >= '0' || s[i] <= '9') && s[i] != '-' && s[i] != '+'))return 0;
long ans = 0;
//分为整数中的正数和负数情况
if (s[i] == '-') {
i++;
while (i < s.size() && s[i] >= '0' && s[i] <= '9') {
ans = ans * 10 - (s[i]-'0'); //相当于是将字符变成整数,不然输出的就是对应的ASCII码。
i++;
if (ans != (int)ans) return INT_MIN; //32 位有符号整数范围 [−2的31次方, 2的31次方 − 1]
}
}
else {
if (s[i] == '+')
i++;
while (i < s.size() && s[i] >= '0' && s[i] <= '9') {
cout << s[i] << " " << ans << " " << endl;
ans = ans * 10 + (s[i]-'0'); //s[i]-'0'计算的就是相对字符'0'的偏移值,该偏移值正好是字符所代表的字面数值
i++;
if (ans != (int)ans)return INT_MAX;
}
}
return (int)ans;
}
};
通过结果:
9.回文数
解题:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0) return false;
if(x>=0 && x<=9) return true;
int temp=x,y=x;
long long sum=0;
while(temp){
y=temp%10;
sum=sum*10+y;
temp=temp/10;
}
if(sum==x) return true;
else return false;
}
};
通过结果:
另一种思路:只回文一半
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
if (x >= 0 && x <= 9) return true;
if (x % 10 == 0) return false;
int temp = x, y = x,sum = 0;
while (temp > sum) {
y = temp % 10;
temp = temp / 10;
sum = sum * 10 + y;
}
if (sum == temp || sum/10==temp) return true;
else return false;
}
};
10.正则表达式匹配
解题:
class Solution {
public:
bool isMatch(string s, string p) {
if(p.empty() ) return s.empty(); //当p为空的所有情况
if(p.size()==1){ //当p长度=1的所有情况
return ( s.size()==1 && (s[0]==p[0] || p[0]=='.') );
}
if(p[1]!='*'){ //当p长度>1
if(s.empty()) return false;
else return (s[0]==p[0] || p[0] == '.')&&isMatch(s.substr(1),p.substr(1));
}
while(!s.empty() && (s[0]==p[0] || p[0]=='.') ){
if(isMatch(s,p.substr(2))) return true;
s=s.substr(1);
}
return isMatch(s,p.substr(2));
}
};
这题不太会写,参考:
LeetCode(10):正则表达式匹配 - Ariel_一只猫的旅行 - 博客园
通过结果:
挺秃然的,肯定要优化……
优化代码: