今天是本周的最后三道题目,从做题来看,发现自己能力还是达不到问题立刻解决最优,不过也是学习了,还有有点困难去做困难的题目,虽然有时候会有不知所措,或者解题方法不能够好,但是清楚认识到自己的问题,也是一件好事。不多说什么了,学到了就是赚到了。
第八题 :字符串转换整数 (atoi)
解题思路:这个题目我没有多想法,就是根据情况来依次解决,最终达到我想要的结果,就是遍历一遍讨论情况,便可以解决问题,时间复杂度O(n).
代码:
int myAtoi(string str)
{
int length = str.size();//获取字符串的长度
int index = 0; //当前下标
int result = 0; //结果记录值
bool flog = true; //true表示+ false表示 -
while (str[index] == ' ')//若前面是空的情况下
{
index++;
}
if (str[index] == '-' || str[index] =='+')
{
if (str[index] == '-')
{
flog = false;
}
index++;
}
else if (!isdigit(str[index]))
{
return result;
}
for (;index < length && isdigit(str[index]);index++)
{
if (result > INT_MAX / 10 || (result == INT_MAX / 10 && str[index] - '0' > 7)) //溢出
{
return flog ? INT_MAX : INT_MIN;
}
result = result * 10 + (str[index] - '0');
}
return flog ? result : -1 * result;
}
void testmyAtoi()
{
string stf = " -42";
int data = myAtoi(stf);
cout << data << endl;
}
输出结果: -42
若看此题,也不算中等难度,这样解法算是简单类的,后来我看了答案,官方有限状态机(deterministic finite automaton, DFA)
的方法来区别end 与start,可以防止代码比较臃肿,但是基本想法还是一样。
感兴趣的小伙伴可以看:
第九题 :回文数
解题思路:这个题目很简单了本人之前也做过,回文数之前有回文字符串,这里可以采用翻转数据判断,就是要考虑翻转数据是否泄漏问题,也可以采用变成字符串的形式,本人采用的第一个方案:
bool isPalindrome(int x) {
if (x < 0) return false;
int num = x;
int getnum = 0;
while (num != 0)
{
if (getnum > INT_MAX / 10 || (getnum == INT_MAX / 10 && num % 10 > 7))
return false;
if (getnum < INT_MIN / 10 || (getnum == INT_MIN / 10 && num % 10 < -8))
return false;
getnum = getnum * 10 + num % 10;
num /= 10;
}
return x == getnum;
}
就是这么简单与枯燥,不过写代码也算很累了,慢慢加油吧。
第十题:正则表达式匹配
bool isMatch(string s, string p) {
int m = s.size();
int n = p.size();
auto matches = [&](int i, int j) {
if (i == 0) {
return false;
}
if (p[j - 1] == '.') {
return true;
}
return s[i - 1] == p[j - 1];
};
vector<vector<int>> f(m + 1, vector<int>(n + 1));
f[0][0] = true;
for (int i = 0; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (p[j - 1] == '*') {
f[i][j] |= f[i][j - 2];
if (matches(i, j - 1)) {
f[i][j] |= f[i - 1][j];
}
}
else {
if (matches(i, j)) {
f[i][j] |= f[i - 1][j - 1];
}
}
}
}
return f[m][n];
}
本题目为困难。暂时没有写,有时间不从说明。