力扣演算法題筆記 數學

2021-09-26 20:24:51 字數 1938 閱讀 8371

給定乙個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。

示例:輸入: 38  輸出: 2

解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2。 由於 2 是一位數,所以返回 2。

【迴圈法】(自己的方法)首先將原數字轉化為字串,再將字串中的每個元素轉換成數字,然後累加,如此迴圈,直到數字小於等於9.

class

solution

:def

adddigits

(self, num:

int)

->

int:

while num>9:

str_num=

str(num)

num=

0for s in str_num:

num+=

int(s)

return num

上面這種方法的時間複雜度比較高,下面是別人的解法:

class

solution

:def

adddigits

(self, num:

int)

->

int:

return num %9or

9*bool

(num)--

----

----

----

----

----

-或者---

----

----

----

----

----

----

---class

solution

:def

adddigits

(self, num:

int)

->

int:

if num <9:

return num

elif num %9==

0:return

9else

:return num%92

3/

每個非負整數 n 都有其二進位制表示。例如, 5 可以被表示為二進位制 「101」,11 可以用二進位制 「1011」 表示,依此類推。注意,除 n = 0 外,任何二進位制表示中都不含前導零。

二進位制的反碼表示是將每個 1 改為 0 且每個 0 變為 1。例如,二進位制數 「101」 的二進位制反碼為 「010」。給定十進位制數 n,返回其二進位制表示的反碼所對應的十進位制整數。

示例 1:  輸入:5  輸出:2

解釋:5 的二進位制表示為 「101」,其二進位制反碼為 「010」,也就是十進位制中的 2 。

示例 2:  輸入:7  輸出:0

解釋:7 的二進位制表示為 「111」,其二進位制反碼為 「000」,也就是十進位制中的 0 。

思路:由於轉碼就是將二進位制數中的1和0互相轉換,進一步可以知道,如果某一位上的數字是n(0或1),那麼轉碼後的數字就是1-n。因此,首先需要判斷這個十進位制的數字轉化為二進位制後的位數 i 然後,轉碼後的數字與原數字的和的二進位制形式應該是1111111(有i位),那麼所求結果就是2i-1-n

力扣演算法題

給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。但是,陣列中同乙個元素不能使用兩遍。思路一 暴力列舉 將陣列中的每個元素都拿來與後面的元素逐一相加,然後與目標值作比較,如果正確則直接返回下標值。那麼,就會有最壞的情況...

力扣演算法題

題目描述如下 羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況...

力扣演算法題 猜字謎

外國友人仿照中國字謎設計了乙個英文版猜字謎小遊戲,請你來猜猜看吧。字謎的迷面 puzzle 按字串形式給出,如果乙個單詞 word 符合下面兩個條件,那麼它就可以算作謎底 單詞 word 中包含謎面 puzzle 的第乙個字母。單詞 word 中的每乙個字母都可以在謎面 puzzle 中找到。例如,...