leetcode第三天 9回文数、13罗马数字转整数、14最长公共前缀
回文数:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
算法
首先,我们应该处理一些临界情况。所有负数都不可能是回文,例如:-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
- LeetCode-13罗马数字转整数
- leetcode的python实现 刷题笔记14:最长公共前缀
- [C++]LeetCode 14: Longest Common Prefix(最长公共前缀)
- Leetcode 13 Roman to Integer 罗马数字转整数
- Leetcode(14) 最长公共前缀
- LeetCode 14 Longest Common Prefix(最长公共前缀)
- Leetcode(13)罗马数字转整数
- LeetCode - 13. 罗马数字转整数
- leetcode - 13 - 罗马数字转整数
- leetcode-14-求字符串数组最长公共前缀
- leetcode——14——Longest Common Prefix最长公共前缀
- leetcode-14-最长公共前缀
- LeetCode - 14. 最长公共前缀
- leetcode的python实现 刷题笔记13: 罗马数字转整数
- 某公司面试题:最长顺子;输入很多个整数(1<=数值<=13),返回其中可能组成的 最长的一个顺子(顺子中数的个数代表顺的长度); 其中数字1也可以当作14用
- LeetCode 14 Longest Common Prefix(最长公共前缀)(String)
- [LeetCode] 13. 罗马数字转整数
- leetcode-13-罗马数字转整数(roman to integer)-java
- Leetcode : 13 罗马数字转整数
- leetcode 14 最长公共前缀(python)