LeetCode_simple 7.反轉整數
阿新 • • 發佈:2018-12-10
目錄
0. 題目描述
1. 解題&分析
(1) 題目要求對整數進行反轉,首先就想到了可以利用棧這個資料結構。於是有了一個很自然很暴力的思路:
將int型的數字轉換成string字串,逐一遍歷每個字元並將其壓入棧中,再一個個pop出來,就得到了一個反序的字串,再將字串轉換回int型數字。
程式碼如下
#include<string> #include<stack> int reverse(int x) { stack<char> s; string str = to_string(x); int start = 0, result; if (str[0] == '-') { //如果為負數,遍歷下標從1開始 start = 1; } while (str[str.length() - 1] == '0' && str.length() != 1) { //擦除數字反轉前所有的末尾0 str.erase(str.length()-1); } //遍歷string中每一個數字,壓棧,出棧,進行反轉 int length = str.length(); for (int i = start; i < length; i++) { s.push(str[i]); } int index = 0; while(!s.empty()) { str[index++] = s.top(); s.pop(); } str[index] = '\0'; try { //轉換string → int result = stoi(str); } catch (const std::out_of_range& e) { //如果溢位則置0 result = 0; } if (start == 1) { result = 0 - result; } return result; }
時間複雜度 O(n^2),空間複雜度 O(n) 。
測試用時20ms,優於70%左右的提交。
(2) 傻寫了半天,突然想到字串反轉這種操作大概率是已經存在輪子的,為什麼還要吭呲吭呲自己造。搜了一下發現果然有:
第一種:string.h中的strrev函式
char s[]="hello"; strrev(s);
第二種: algorithm中的reverse函式
reverse(str.begin(),str.end());
嘗試了第二種的效率,結果:測試用時20ms,優於70%左右的提交。並無明顯差別……
待優化……