C#算法之各位相加
各位相加
給定一個非負整數(shù) num
,反復(fù)將各個位上的數(shù)字相加,直到結(jié)果為一位數(shù)。
示例:
輸入: 38 輸出: 2 解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位數(shù),所以返回 2。
進階:
你可以不使用循環(huán)或者遞歸,且在 O(1) 時間復(fù)雜度內(nèi)解決這個問題嗎?
代碼模板
public class Solution { public int AddDigits(int num) { } }
測試數(shù)據(jù)
輸入 1 輸出 1 輸入 10 輸出 1 輸入 38 輸出 2 輸入 199 輸出 1 輸入 8888 輸出 5
筆者的方法:
使用了while循環(huán),除一次計算一次,原始數(shù)和各位數(shù)和同時變化。時間在70ms內(nèi)。
public static int Csum(int num) { if (num < 10) //小于10的數(shù)直接返回 return num; int shi = 0; //記錄個位數(shù)相加 while (num > 0) { if (num >= 10) { shi += num % 10; num = num / 10; } else if (num < 10) { shi += num; num = num / 10; } if (shi >= 10) shi = shi % 10 + shi / 10; //超過10的個位數(shù)重新變化 } return shi; }
方法二 棄九驗算法
同樣在 60-70ms
public class Solution { public int AddDigits(int num) { if(num==0) return 0; if(num%9==0) return 9; return num%9; } }
到此這篇關(guān)于C#算法之各位相加的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于C# Math 處理奇進偶不進的實現(xiàn)代碼
下面小編就為大家?guī)硪黄P(guān)于C# Math 處理奇進偶不進的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05C# winform程序?qū)崿F(xiàn)開機自啟動并且識別是開機啟動還是雙擊啟動
這篇文章主要介紹了C# winform程序?qū)崿F(xiàn)開機自啟動并且識別是開機啟動還是雙擊啟動的實現(xiàn)代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-10-10