給定乙個非負整數 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 中找到。例如,...