摘要:解題思路這題就是最基礎(chǔ)的遞歸運(yùn)算題目,兩個選擇,一個是偶數(shù),一個是奇數(shù),偶數(shù)直接除操作,奇數(shù)變成左右兩個偶數(shù)繼續(xù)操作選擇操作最小的,注意有一個用例是,解決方法有兩種,第一就是首先把的二次冪都干掉,代碼如下
解題思路:
這題就是最基礎(chǔ)的遞歸運(yùn)算題目,兩個選擇,一個是偶數(shù),一個是奇數(shù),偶數(shù)直接除2操作,奇數(shù)變成左右兩個偶數(shù)繼續(xù)操作(選擇操作最小的),注意有一個用例是2147483647,解決方法有兩種,第一就是首先把2的二次冪都干掉,代碼如下:
class Solution {public: int integerReplacement(long long n) { // 如果是2的二次冪 if(n & (n-1) == 0){ int res = 0; while(n > 1){ res ++; n >>= 1; } return res; } if(n % 2 == 0) return integerReplacement(n/2) + 1; else return min(integerReplacement(n+1), integerReplacement(n-1)) + 1; }};
第二種方法就是直接對奇數(shù)開半遞歸和開半加一遞歸,這樣的代碼會更加簡潔,代碼如下:
class Solution {public: int integerReplacement(int n) { if(n == 1) { return 0; } if(n % 2 == 0) return 1 + integerReplacement(n / 2); else return 2 + min(integerReplacement(n / 2), integerReplacement(n / 2 + 1)); }};
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/123941.html
摘要:解題思路一道非常簡單的題目,不能被繞進(jìn)去,首先要把題目讀明白,左右坡度差本質(zhì)上是左右子樹和之差,那么問題就簡單了,每次,返回的就是當(dāng)前所在子樹之和,更新坡度差的話就是當(dāng)前左右子樹之差,這兩個要分開來計(jì)算,代碼如下 ...
摘要:解題思路模擬題就按照題目意思來做題目分三種情況那我們也分三種情況通過設(shè)置用來標(biāo)志第一位是大寫還是小寫小寫的話直接通過后面的都不能大寫來判斷大寫的話用記錄后面的大寫的個數(shù)為或者為字符串長度才符合要求代碼如下代碼 ...
摘要:解題思路一道并不簡單的模擬題,需要考慮的情況總結(jié)下來有三種長度不同返回完全相同且有重復(fù)字符返回字符串有不相等的兩個地方需要查看它們交換后是否相等即可。 解題思路:...
摘要:解題思路這題本質(zhì)就是數(shù)學(xué),需要分析,每個燈泡會被翻轉(zhuǎn)的時機(jī)正好是他的約數(shù)次遍歷的時候,那么我們其實(shí)知道,對于每個數(shù)的約數(shù)都是成對出現(xiàn)的,除非是完全平方數(shù),會有奇數(shù)個約數(shù),所以,最后完全平方數(shù)的燈泡會亮,題目也就變成了找 ...
摘要:解題思路首先要明確一點(diǎn),就是打亂的英文能夠還原成數(shù)字,然后觀察表格規(guī)律你就能發(fā)現(xiàn),有的數(shù)字一個字母就能決定出現(xiàn)。所以我們從單個字母就能知曉的數(shù)字出發(fā)進(jìn)行統(tǒng)計(jì),用一個長度的數(shù)組來存儲字母個數(shù),然后對每一個數(shù)字一一統(tǒng)計(jì),代碼如下 ...
閱讀 3160·2021-11-19 09:40
閱讀 3647·2021-11-16 11:52
閱讀 2980·2021-11-11 16:55
閱讀 3170·2019-08-30 15:55
閱讀 1176·2019-08-30 13:08
閱讀 1655·2019-08-29 17:03
閱讀 3011·2019-08-29 16:19
閱讀 2579·2019-08-29 13:43