C#算法之各位相加
各位相加
給定一個(gè)非負(fù)整數(shù) num
,反復(fù)將各個(gè)位上的數(shù)字相加,直到結(jié)果為一位數(shù)。
示例:
輸入: 38 輸出: 2 解釋: 各位相加的過(guò)程為:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位數(shù),所以返回 2。
進(jìn)階:
你可以不使用循環(huán)或者遞歸,且在 O(1) 時(shí)間復(fù)雜度內(nèi)解決這個(gè)問(wèn)題嗎?
代碼模板
public class Solution { public int AddDigits(int num) { } }
測(cè)試數(shù)據(jù)
輸入 1 輸出 1 輸入 10 輸出 1 輸入 38 輸出 2 輸入 199 輸出 1 輸入 8888 輸出 5
筆者的方法:
使用了while循環(huán),除一次計(jì)算一次,原始數(shù)和各位數(shù)和同時(shí)變化。時(shí)間在70ms內(nèi)。
public static int Csum(int num) { if (num < 10) //小于10的數(shù)直接返回 return num; int shi = 0; //記錄個(gè)位數(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; //超過(guò)10的個(gè)位數(shù)重新變化 } return shi; }
方法二 棄九驗(yàn)算法
同樣在 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#算法之各位相加的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于C# Math 處理奇進(jìn)偶不進(jìn)的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇關(guān)于C# Math 處理奇進(jìn)偶不進(jìn)的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05C# winform程序?qū)崿F(xiàn)開機(jī)自啟動(dòng)并且識(shí)別是開機(jī)啟動(dòng)還是雙擊啟動(dòng)
這篇文章主要介紹了C# winform程序?qū)崿F(xiàn)開機(jī)自啟動(dòng)并且識(shí)別是開機(jī)啟動(dòng)還是雙擊啟動(dòng)的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10C#中自定義高精度Timer定時(shí)器的實(shí)例教程
這篇文章主要介紹了C#中自定義高精度Timer定時(shí)器的實(shí)例教程,多線程的Timer編寫需要注意線程安全的問(wèn)題,需要的朋友可以參考下2016-04-04基于WPF實(shí)現(xiàn)帶明細(xì)的環(huán)形圖表
這篇文章主要介紹了如何利用WPF繪制帶明細(xì)的環(huán)形圖表?,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2022-08-08C# WPF實(shí)現(xiàn)的語(yǔ)音播放自定義控件
這篇文章主要介紹了C# WPF實(shí)現(xiàn)的語(yǔ)音播放自定義控件,幫助大家更好的理解和學(xué)習(xí)使用c# WPF技術(shù),感興趣的朋友可以了解下2021-04-04c# 從IE瀏覽器獲取當(dāng)前頁(yè)面的內(nèi)容
從IE瀏覽器獲取當(dāng)前頁(yè)面內(nèi)容可能有多種方式,今天我所介紹的是其中一種方法?;驹恚寒?dāng)鼠標(biāo)點(diǎn)擊當(dāng)前IE頁(yè)面時(shí),獲取鼠標(biāo)的坐標(biāo)位置,根據(jù)鼠標(biāo)位置獲取當(dāng)前頁(yè)面的句柄,然后根據(jù)句柄,調(diào)用win32的東西進(jìn)而獲取頁(yè)面內(nèi)容。感興趣的朋友可以參考下本文2021-06-06C#多線程學(xué)習(xí)之(二)操縱一個(gè)線程的方法
這篇文章主要介紹了C#多線程學(xué)習(xí)之操縱一個(gè)線程的方法,實(shí)例分析了C#中線程的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04