LeetCode的问题有趣的地方在于人家直接给了一个接口,相当于只需要写了一个函数就可以了,我是不知道多个调用函数会怎么做。对于LeetCode的刷题的方法,其实可以看看知乎就可以啦。
知乎链接:Leetcode刷题指南
这几条意见也贴出来,对于未来的愉快的刷题有着很大的作用。
一定在理清楚思路之后再去编程。我喜欢的一个比喻就是,对于算法就像是在做一道英语数学题,英语不是最重要的(当然不是在说不重要),反而背后的数学是最重要的,一定要避免"一顿操作猛如虎,一看战绩0-5"这种问题。捋清楚思路,再去动笔。好像写作文啊。。。>_< !
2.整数反转
class Solution {
public:
int reverse(int x) {
long i = 0;
long t = x;
//直接转换的函数,不必转存//
while(t != 0){
i = 10 * i + t % 10;
t = t / 10;
}
if(i < INT_MIN || i > INT_MAX){//INT_MAX和 INT_MIN的意思是指临界值//
return 0;
}
return i;
}
};
3.回文数
注意要点:不使用字符串处理回文数的操作。掐头去尾,一次抬走两位。
class Solution {
public:
bool isPalindrome(int x) {
int d = 1;
if(x < 0) return false;//小于0的情况//
else{
while(x / d >= 10) d *= 10;//先去求位数//
while(x > 0){
int a = x / d;//最高位//
int b = x % 10;//最低位//
if(a != b) return false;
x = x % d / 10;//掐头去尾//
d = d / 100;//一次去两位//
}
}
return true;
}
};
14.最长公共前缀
在string类型中也可以使用push_back(),其作用就是类似于vector,可以将东西压入string类型中。
其次,在C++和C中,auto的类型也是不同的。具体的情况可以参考这篇文章:浅析C语言auto关键字和C++ 中的auto关键字
我在这个地方大概总结以下他说的:在C语言中:auto是一种最为广泛的变量,在C语言中默认的是int类型;而在C++中,C++中的auto关键字是一个类型说明符,通过变量的初始值或者表达式中参与运算的数据类型来推断变量的类型。也就是说,不初始化的话,我auto自己都不知道自己是个什么东西。
这个题目思路很清晰,但是这些细节需要再去考虑。
class Solution {
public:
string prefix2(string& str1, string& str2){
if(str1.empty() || str2.empty()){
return "";
}
string res;
auto sp1 = str1.begin();
auto sp2 = str2.begin();
while(sp1!=str1.end() && sp2!=str2.end()){
if(*sp1 == *sp2){
res.push_back(*sp1);
sp1++;
sp2++;
}
else{
return res;
}
}
return res;
}
string longestCommonPrefix(vector<string>& strs) {
//先考虑特殊情况//
if(strs.empty()){
return "";
}
if(strs.size()==1){
return strs[0];
}
string res = strs[0];
for(int i=1; i < strs.size(); i++){
res = prefix2(res, strs[i]);
}
return res;
}
};