這是我認為滿有趣的一題
雖然leetCode標記他的Difficutly為 Easy,但是最後玩出來的解法是很有趣的
https://leetcode.com/problems/add-digits/
Given a non-negative integer
num
, repeatedly add all its digits until the result has only one digit.For example:
Given
num = 38
, the process is like: 3 + 8 = 11
, 1 + 1 = 2
. Since 2
has only one digit, return it.假設N = 38 則計算方式為 3+8 = 11 → 1+1 = 2
依照我以往的Ultimate Stupid Hard-Core Method,一定是先來個 while(n / 10 > 0) {}
然後真的就是兩個while在跑…google了一下原來這叫數根(wiki)
如果數根能被3或9整除,則原來的數也能被3或9整除。
Ex. 38/3 = 12,餘數為2; 55/3 = 18,餘數為1
所以只要套用這個原理,使用3 來求餘數即可
…
呃
用3求餘數會連個位數都再運算一次 (ex. 4%3 = 1,本來答案應該是4,但是這方法輸出的答案是1)
果然是太天真,最後用9去算就搞定了
public class Solution {
public int AddDigits(int n)
{
if (n == 0)
{
return 0;
}
else if (n % 9 == 0)
{
return 9;
}
return n % 9;
}
}
但網路神人多得是:
http://www.cnblogs.com/grandyang/p/4741028.html
https://skyyen999.gitbooks.io/-leetcode-with-javascript/content/questions/258md.html
繼續努力吧…
單純筆記,皆為非正規作法,旁門左道,胡搞瞎搞。