給你一個 32 位的有符號整數 x ,返回 x 中每位上的數字反轉后的結果。
leetcode常用算法、如果反轉后整數超過 32 位的有符號整數的范圍 [?231, 231 ? 1] ,就返回 0。
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0
1.簡單解法
1.判斷x的大小,對于負值將其轉化為正值,待其反轉后再將再填負號
2.將整數轉化為字符串
3.通過[::-1]進行反轉
4.范圍認定,注意:要求的是reverse之后再進行判斷而不是之前的x值是否在范圍中。
class Solution(object):def reverse(self, x):""":type x: int:rtype: int"""if x==0:return xif x<0:x=-xstr_x=str(x)str_x=str_x[::-1]x=int(str_x)x=-x if x<=-2**31:return 0else:return xif x>0:str_x=str(x)str_x=str_x[::-1]x=int(str_x)if x>=2**31-1:return 0else:return x
2.優化解法
1.將x的絕對值存入y
2.反復“彈出”y的最后一位,將其”推入“res的后面
3.在這樣做的時候,我們可以預先檢查向原整數附加另一位數字是否會導致溢出。
class Solution(object):def reverse(self, x):""":type x: int:rtype: int"""y,res=abs(x),0boundary=1<<31 if x<0 else (1<<31)-1while y!=0:res=res*10+y%10if res>boundary:return 0y//=10return res if x>0 else -res
python中的左移和右移:
左移、右移是指:在二進制中,將1向左、向右移動的位數,返回的是將二進制數轉換為十進制數的結果。
公式: a<<b 等價于 a*(1<<b),而(1<<b)的結果是二進制數: 100…00 (共b個0,表示將1向左移動b位),對應的十進制結果是:2^{b}
示例: 3<<5 = 3*2^{5} = 96
使用左移右移操作,可以提升計算速度。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态