iT邦幫忙

0

leetcode寫題目測資時遇到問題

https://ithelp.ithome.com.tw/upload/images/20210129/20130307RUISJYtm7K.pnghttps://ithelp.ithome.com.tw/upload/images/20210129/20130307PaD5XVMS7A.png
我覺得我寫的應該是沒什麼問題,帶了很多筆數字測驗也ok,但是測資時1534236469這個數字不行,可是1534236469的確在-231 <= x <=231-1的範圍內,所以應該不會要return 0
阿,還是我的程式碼有錯的地方?

圖片,懶的重打了。
我就跳過了。給其它人處理吧
buffle iT邦新手 5 級 ‧ 2021-01-29 14:55:20 檢舉
class Solution(object):
def reverse(self, x):
s=str(x)
leng=len(s)
v=int((-1)*(leng)-1)
if not -2**31 <= x <=2**31-1 :
return 0
elif s=="0":
return 0
elif int(x)<0 and int(x)%10==0:
s1=str(abs(x))
target=s1[-1:v:-1]
return int(target)*(-1)
elif int(x)%10==0:
target=s[-1:v:-1]
return int(target)
elif int(x)>0:
target=s[-1:v:-1]
return int(target)
else:
x=abs(x)
k=str(x)
target=k[-1:v:-1]
return int(target)*(-1)
我是這樣寫的,請問我哪裡出錯了

1 個回答

1
ccutmis
iT邦高手 4 級 ‧ 2021-01-29 16:07:05

沒刷過leetcode 不過看了一下你這題的要求,好像是說輸入一個整數然後把它反轉,如果有帶負號的在反轉後要保留負號,然後判斷反轉後的數字如果是在正負2的23次方範圍內就傳回該值,超出範圍的就傳回0,如果我理解沒錯的話,應該可以這樣寫...(ps.您寫的我就不去抓是哪的問題了)

def reverse1(x):
    res_str=x.replace("-","")[::-1]
    if "-" in x: res_str="-"+res_str
    if -2**31<int(res_str)<2**31:
        return int(res_str)
    else:
        return 0

while 1:
    xx=input("Input: x = ")
    print("Output:",reverse1(xx))

結果:

Input: x = 123
Output: 321
Input: x = -123
Output: -321
Input: x = 1534236469
Output: 0

1534236469 倒轉為 9646324351 確實超出範圍 所以傳回 0
若輸入 9646324351 會傳回 1534236469 因為倒轉值在範圍內

buffle iT邦新手 5 級 ‧ 2021-01-29 16:29:47 檢舉

謝謝你,我了解了

ccutmis iT邦高手 4 級 ‧ 2021-01-29 16:35:37 檢舉

不客氣 :)

我要發表回答

立即登入回答