[C#][LeetCode][258.Add Digits]

這是我認為滿有趣的一題

雖然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 = 111 + 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

繼續努力吧…

單純筆記,皆為非正規作法,旁門左道,胡搞瞎搞。