leetcode常用算法,leedcode刷題——整數反轉

 2023-10-06 阅读 28 评论 0

摘要:給你一個 32 位的有符號整數 x ,返回 x 中每位上的數字反轉后的結果。 leetcode常用算法、如果反轉后整數超過 32 位的有符號整數的范圍 [?231, 231 ? 1] ,就返回 0。 示例 1: 輸入:x = 123 輸出:321 示例 2: 輸入:x &#

給你一個 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

使用左移右移操作,可以提升計算速度。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/123181.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息