因為一直寫的都是android程序谚攒,所以之前想用java文件去提交,弄了半天android studio氛堕,終于將java程序運行了起來馏臭,可是一查,卻發(fā)現(xiàn)java運行效率是c語言的三分之一讼稚。
OK括儒,開始查刷OJ用什么語言比較好,查到一般用C++锐想,但是如果遇到高精度和匹配度的問題帮寻,用java水才比較好,好吧赠摇,以后將C++撿起來~
開始安裝mac的C++編輯器固逗,Xcode和Qtcreator浅蚪,后來發(fā)現(xiàn)Xcode很好用(雖然3.8G,下載了好久烫罩。惜傲。。)贝攒,但是果斷卸載Qtcreator盗誊,Xcode將來也可以用來將來編Swift。
第一次刷leetcode隘弊,還按照以前的int main的思路哈踱,發(fā)現(xiàn)編譯不通過,后來查了一下梨熙,發(fā)現(xiàn)leetcode上面必須有個Solution的類嚣鄙,也就是切換到C++提交方式時,默認的東西串结。
下面的解法按照時間從短到長排序:
解法一:
提交時間::Your runtime beats <u>9.99%</u> of cppsubmissions
時間復雜度:O(n/2).
思路:直接用c++自帶的reverse函數(shù)。
string reverseString(string s) {
reverse(s.begin(), s.end());
return s;
}
ps:過后查了一下reverse這個函數(shù)舅列,reverse這個函數(shù)的解法肌割,是for循環(huán)了一半的長度,從兩頭到中間帐要,首位加把敞,末尾減,然后交換榨惠,交換內(nèi)置的是swap操作奋早,swap就是最常用的一個拷貝構(gòu)造,兩次賦值操作赠橙。
結(jié)果:
ps:這種解法用了頗多的時間耽装,主要是c++和xcode用的不熟練的原因,在string和char[]互相轉(zhuǎn)換上用了頗多時間期揪。
解法二:
提交時間:Your runtime beats <u>9.99%</u> of cppsubmissions
時間復雜度:O(n)掉奄。
思路:分治遞歸。
string reverseString(string s) {
if(s.length()<2)
return s;
else{
string s1 = s.substr(0, s.length()/2-1);
string s2 = s.substr(s.length()/2-1, s.length());
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
s = s2+s1;
return s;
}
}
解法三:
提交時間:Your runtime beats <u>4.65%</u> of cppsubmissions
時間復雜度:O(n)
思路:新建字符串凤薛,將就字符串倒著拼接姓建。
string reverseString(string s) {
string newstr = "";
int length = (int)s.length();
for(int i = 0; i<length;i++){
newstr+=s.at(length-i-1);
}
return newts;
}
暫時沒想到更好的結(jié)題方法,但是這個效率是很低的缤苫,一定是有更好的解題方法的速兔。