【LeetCode】LeetCode刷题(11)【简单】回文数&罗马数字转整数(C++)

3

回文数

题目链接——回文数 在这里插入图片描述代码示例

class Solution {
public:
    bool isPalindrome(int x) {
    if(x < 0)
    {
        return false;
    }
    else
    {
        int ret = 0;
        int temp = x;
        while(temp)
        {
            if (ret > INT_MAX / 10 || ret < INT_MIN / 10)
            {
                return 0;
            }
            ret = ret*10 + temp% 10;
            temp /= 10;
        }
        if(ret == x)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    }
};

题解:

同反转整数,在此基础上定义临时变量,不要更改原来的x。

反转整数——反转整数

罗马数字转整数

题目链接——罗马数字转整数 在这里插入图片描述代码示例:

class Solution {
public:

int GetNum(char ch)
    {
        switch(ch)
        {          
        case 'I':
            return 1;
        case 'V':    
            return 5;
        case 'X':
            return 10;
        case 'L':
            return 50;
        case 'C':
            return 100;
        case 'D':
            return 500;
        case 'M':
            return 1000;
        default:
            return 0;
        }
    }

    int romanToInt(string s) {
        int ret = 0;
        int num =0;
        int nextnum = 0;
        for(int i =0;i<s.size();i++)
        {
            num = GetNum(s[i]);
            if(i == s.size()-1)
            {
                ret += num;
            }
            else
            {
                nextnum = GetNum(s[i+1]);
                if(num<nextnum)
                {

                    ret -= num;
                }
                else
                {
                    ret += num;
                }
            }

        }
        return ret;
    }

};

题解:

定义ret为最后的结果

通过观察罗马数字,得到规律,多个字母拼接的罗马数字,
从左到右依次取每个字母,得到对应的数值,和挨着的下一个字母对应的数值,
如果当前字母对应数值小于下一个字母对应的数字,
那么当前字母对应的数值就变成负的,反之不做改变,
不断加到ret中。
......
其中,到了最后一个字母就不找下一个字母了,直接将它对应的数值加到ret中,
返回结果ret。