# leetcode #2:7-Reverse Integer 給定一個整數,反轉他(例如123變成321 如果超出-2^31~2^31-1就返回0) ## 思考 變成字串之後,利用反轉的函數將字串翻轉,再變回數字 如果是負的,先取絕對值再翻轉,變回來再乘-1 ``` class Solution: def reverse(self, x: int) -> int: if x >0: a= str(x) b= a[::-1] c= int(b) else: d= abs(x) a= str(d) b= a[::-1] c= int(b)*(-1) if -2**31 < c < 2**31-1: return c else: return 0 ``` ## 檢討 1. 記得要考慮負號的情況 2. 本來以為1230翻轉成0321再轉回數字的時候會有問題,但其實就直接變成321,符合題目需求(本來想要因此先除以10,但不用) 3. 此題是整數int變成字串str,如果數字要除的話,即使整除也要寫//,表示只取整數 ## 其他解法? 若要反轉數字,也可以以下思考: 先取得尾數a1(mod),將此數//10再取mod可以得到下一個尾數a2... 將a1*10 + a2,再將此數*10 +a3,再將此數*10 +a4....即可反轉 例如1234: 4*10+3=43 43*10+2=432 432*10+1=4321 直到取得的尾數 (code可以在#3看到) ## 新知識筆記 * 字串擷取的各種操作 [:] 擷取某一個範圍(不包含後者),負數代表從後面數 [::] (若不是連續取的話需要)一個冒號代表處理後的位置,第二個代表間隔,負的代表逆向(逆向一定要搭配負號,不管前後數字的順序) 前面沒有寫代表0,後面沒有寫代表最後 字串'0123456789' [0:3] 012 [:] 全部 [6:] (也就是6:尾)6789 [:-3] (-3代表7,也就是0:7) 0123456 [-3:-1] (也就是7:9) 78 [::-1] (也就是頭:尾:間隔-1,反向) 9876543210 [::-2] (間隔-2,反向) 97531 [2:-2:3] (從2~7,間隔3) 25 [1:4:-1] 321(1~4不包含4,反向) [4:1:-1] 432(4~1不包含1,包含2~4但因為加負號所以反向) [4:1:1] 234(4~1不包含1,後面是正的所以是正向)    ###### tags: `python` `leetcode`