leetcode 991 壞了的計算器

2021-09-13 03:18:47 字數 2096 閱讀 2829

在顯示著數字的壞計算器上,我們可以執行以下兩種操作:

最初,計算器顯示數字x

返回顯示數字y所需的最小運算元。

示例 1:

輸入:x = 2, y = 3輸出:2解釋:先進行雙倍運算,然後再進行遞減運算 .
示例 2:

輸入:x = 5, y = 8輸出:2解釋:先遞減,再雙倍 .
示例 3:

輸入:x = 3, y = 10輸出:3解釋:先雙倍,然後遞減,再雙倍 .
示例 4:

輸入:x = 1024, y = 1輸出:1023解釋:執行遞減運算 1023 次

1 <= x <= 10^91 <= y <= 10^9

首先這一題的思路是

先逆向思維,把題目倒過來,理解為x不變,y只能進行除2或者+1運算,要使得最後兩者結果相等。

為什麼要進行顛倒呢,因為倒過來會發生的情況比較少,如果是x進行*2或者-1運算運算,那麼在x為任何值的時候都可以進行兩種操作,而倒過來計算,y進行除2或者+1運算,那麼當y為奇數的時候,就不能進行除2運算。這樣就減少了一些可能性。

如果把題目倒過來後,總共有三種情況

第一種情況,如果y第二種情況,是x第三種情況,也就是x這裡來推論一下,首先因為y是偶數,因此如果進行遞增運算,後無法進行除2運算,這種情況下,也就是遞增運算最少需要用兩次(因為x區別就是,是否要進行兩次遞增運算,然後進行除2運算,還是直接除2運算, 從數**算可以得知(y+1+1)/2=y/2+1,需要三次運算,而y/2+1只需要兩次運算,從而得知,在第三種情況下,進行直接除2是永遠比先遞增然後除2要完美的

最後說一下,為什麼不直接正向求解,原因就是這樣,如果直接求解x到y

那麼首先由的情況的第一種x>y,這個只能進行遞增

第二個情況,x第三個情況,x那麼似乎有可能結果剛剛好是2x-2的時候,x先-1然後*2優於2x  ?實際上,這種時候就需要看y了,看看哪種方法能更快逼近x

最後發現,還是要看y,那麼為什麼不直接從y開始逆推?

最後上**

python解法

class solution(object):

# 思路,主要有幾種情況,第一,y小於x,那麼這種情況下,只能進行瘋狂遞減操作,需要進行x-y次操作

# 第二,y>x,那麼首先觀察,y是否為奇數,如果是奇數,那麼只能y先+1,如果是偶數,那麼就可以直接y除2,檢視是夠相近

def brokencalc(self, x, y):

""":type x: int

:type y: int

:rtype: int

"""# 遞迴思路

# if x == y:

# return 0

# if x > y:

# return x - y

# if y % 2 == 0:

# return 1 + self.brokencalc(x,int(y/2))

# else:

# return 1 + self.brokencalc(x,y+1)

# 迴圈思路

allnum = 0

while x != y:

if x > y:

allnum += (x - y)

break

if y % 2 == 0:

y /= 2

allnum+=1

else:

y += 1

allnum+=1

return int(allnum)

壞了的計算器

在顯示著數字的壞計算器上,我們可以執行以下兩種操作 返回顯示數字 y 所需的最小運算元。示例1 輸入 x 2,y 3 輸出 2 解釋 先進行雙倍運算,然後再進行遞減運算 示例2 輸入 x 5,y 8 輸出 2 解釋 先遞減,再雙倍 示例3 輸入 x 3,y 10 輸出 3 解釋 先雙倍,然後遞減,再...

顯示卡壞了的一些症狀?

了解了顯示卡的作用,那麼對於顯示卡壞了的症狀自然會聯想到顯示器畫面上來,如果顯示卡完全壞了,則會出現電腦開機畫面沒有任何顯示,如果顯示卡屬於壞的不是特別嚴重,則可能出現,顯示器畫面能夠有顯示,但顯示顏色不正常 顯示畫面很模糊,甚至因顯示卡的問題,經常宕機等。另外顯示卡壞了的症狀還有顯示器花屏 字跡模...

進擊的巨人的OP被玩壞了

週末的時候把夏季熱番 進擊的巨人 給惡補了一下,其超燃的op 紅蓮之弓矢 我非常喜歡,便找了一下它的中文填詞,翻譯得非常棒 大多數熱門動漫op中文翻譯都挺不錯的 花謝凋零終遭人踐 殘瓣之名至今難辨 墜地之鳥顧影自憐 急盼風起以了夙願 一味禱告縱然心虔 世間又能有何改變 改變當下唯有信念 殊死一戰不畏...