1. 程式人生 > >LeetCode_simple 7.反轉整數

LeetCode_simple 7.反轉整數

目錄

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%左右的提交。並無明顯差別……

待優化……