0
点赞
收藏
分享

微信扫一扫

Leetcode刷题——题目8、9、10

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_一只猫的旅行 - 博客园

通过结果:

挺秃然的,肯定要优化……

优化代码:

 

举报

相关推荐

0 条评论