【LeetCode】LeetCode刷题(11)【简单】回文数&罗马数字转整数(C++)
回文数
题目链接——回文数 代码示例:
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。