一、題目描述
給定一個(gè)非負(fù)整數(shù) num玉工,反復(fù)將各個(gè)位上的數(shù)字相加羽资,直到結(jié)果為一位數(shù)。
示例:
輸入: 38
輸出: 2
解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2遵班。 由于 2 是一位數(shù)屠升,所以返回 2瞄勾。
進(jìn)階:
你可以不使用循環(huán)或者遞歸,且在 O(1) 時(shí)間復(fù)雜度內(nèi)解決這個(gè)問題嗎弥激?
二进陡、解題思路
假設(shè)一個(gè)整數(shù)為m=a+b10+c100+...,那么這個(gè)整數(shù)求取各位和后得到n=a+b+c+...微服,前后之間的差值為m-n=b*9 + c *99 + ...趾疚,可以很容易看出,差值是9的整數(shù)倍以蕴,因此輸入m除以9后得到的余數(shù)即為我們需要的數(shù)糙麦,如果輸入恰好是9的整數(shù)倍,則直接返回9丛肮。
三赡磅、代碼實(shí)現(xiàn)
class Solution {
public:
int addDigits(int num) {
if(num > 9) {
num %= 9;
if(num == 0) {
return 9;
}
}
return num;
}
};