給定一個非負整數 num,反復將各個位上的數字相加,直到結果為一位數,
示例:
輸入: 38
輸出: 2
解釋: 各位相加的程序為:3 + 8 = 11, 1 + 1 = 2, 由于 2 是一位數,所以回傳 2,
進階:
你可以不使用回圈或者遞回,且在 O(1) 時間復雜度內解決這個問題嗎?
思路:我想的是給的int是有范圍的,我就重復很多次即可,
class Solution {
public int addDigits(int num) {
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
num = num % 10 + num / 10;
return num;
}
}
這是所謂正解,確實開闊了思路:
除了傳統的單純回圈,還可以找規律,假如一個三位數'abc',其值大小為s1 = 100 * a + 10 * b + 1 * c,經過一次各位相加后,變為s2 = a + b + c,減小的差值為(s1 -s2) = 99 * a + 9 * b,差值可以被9整除,每一個回圈都這樣,縮小了9的倍數,當num小于9,即只有一位時,直接回傳num,大于9時,如果能被9整除,則回傳9(因為不可能回傳0也不可能回傳兩位數及以上的值),如果不能被整除,就回傳被9除的余數,
class Solution:
def addDigits(self, num: int) -> int:
if num > 9:
num = num % 9
if num == 0:
return 9
return num
CSDN認證博客專家
Go/GoLang
Redis
MySQL
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265931.html
標籤:python
