您的位置:首页 > 其它

leetcode第三天 9回文数、13罗马数字转整数、14最长公共前缀

2018-12-26 22:01 591 查看

回文数:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

算法

首先,我们应该处理一些临界情况。所有负数都不可能是回文,例如:-123 不是回文,因为 - 不等于 3。所以我们可以对所有负数返回 false。

现在,让我们来考虑如何反转后半部分的数字。 对于数字 1221,如果执行 1221 % 10,我们将得到最后一位数字 1,要得到倒数第二位数字,我们可以先通过除以 10 把最后一位数字从 1221 中移除,1221 / 10 = 122,再求出上一步结果除以10的余数,122 % 10 = 2,就可以得到倒数第二位数字。如果我们把最后一位数字乘以10,再加上倒数第二位数字,1 * 10 + 2 = 12,就得到了我们想要的反转后的数字。 如果继续这个过程,我们将得到更多位数的反转数字。

现在的问题是,我们如何知道反转数字的位数已经达到原始数字位数的一半?

我们将原始数字除以 10,然后给反转后的数字乘上 10,所以,当原始数字小于反转后的数字时,就意味着我们已经处理了一半位数的数字。

class Solution {
public:
bool isPalindrome(int x) {
if(x<0 ||(x%10==0&&x!=0)){ // 判断x是否小于零或者等于十的倍数
return false;
}

int revertednumber=0;
while(x>revertednumber){
revertednumber=revertednumber*10+x%10;
x/=10;
}
return x==revertednumber ||x==revertednumber/10;  //retuen ture
}
};

罗马数字转整数:

class Solution {
public:
int romanCharToInt(char ch){
int d=0;
switch(ch){
case'I':
d=1;
break;
case'V':
d=5;
break;
case'X':
d=10;
break;
case'L':
d=50;
break;
case'C':
d=100;
break;
case'D':
d=500;
break;
case'M':
d=1000;
break;
}
return d;
}
int romanToInt(string s) {
if(s.size()<=0)return 0;
int result = romanCharToInt(s[0]);
for(int i=1;i<s.size();i++){
int prev=romanCharToInt(s[i-1]);
int curr=romanCharToInt(s[i]);
if(prev<curr){
result=result-prev+(curr-prev);
}else{
result+=curr;
}
}
return result;
}

};

case用法:switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句n+1,然后退出switch语句,程序流程转向开关语句的下一个语句.

class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string word;
if(strs.size()<=0) return word;
for(int i=1;i<=strs[0].size();i++){//依次取各个字符串的前i位对照,
string w=strs[0].substr(0,i);  //第1个数的前i位放在w里面,用作之后和其他字符串比较
bool match =true;  //设为真
int j=1;//用来选择字符串
for(j=1;j<strs.size();j++){//选择第j个字符串
if(i>strs[j].size()||w!=strs[j].substr(0,i) ){//如果i大于j,即w中字符数大于要对照的字符数,或者w中字符不等于要对照的字符,而跳出;否则就在后面把w(即成功匹配的字符)放在word里面;
match=false;
break;
}
}
if(!match){  //匹配不成功时返回word
return word;
}
word=w; //匹配成功的话就把w放在word里面
}
return word;
}
};

substr用法:

1 #include<string>
2 #include<iostream>
3 using namespace std;
4
5 void main()
6 {
7 string s("12345asdf");
8 string a=s.substr(0,5);
9 cout<<a<<endl;
10 }

上述代码获得字符串s中 从第0位开始的长度为5的字符串.默认时的长度为从开始位置到尾

输出结果为:

12345

return用法:在函数中,如果碰到return 语句,那么程序就会返回调用该函数的下一条语句执行,也就是说跳出函数的执行,回到原来的地方继续执行下去。但是如果是在主函数中碰到return语句,那么整个程序就会停止,退出程序的执行。
https://www.geek-share.com/detail/2533483761.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: