日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[LeetCode] Add Digits - 数字各个位数求和

發布時間:2024/5/28 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [LeetCode] 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.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?

題目解析:
主要考察整數各個位數求和,當且僅當和小于10時輸出。可能會走入整數轉換為字符串的誤區,直接使用取余(%)個位數相加即可,需要注意:
? ? ? ? 1.非負整數判斷
? ? ? ? 2.輸入0時輸出0,輸入10時輸出1
? ? ? ? 3.至于O(1)時間復雜度考察數學公式:1 + (num-1) % 9
? ? ? ? 4.整數轉換字符串可以類似思想:循環個位數轉換reslut=num%10,num=num/10

我的代碼:

int addDigits(int num) {int result;//負數跳出if(num<=0) return 0;if(num<10) return num;result=num;while(result>=10){num=result;result=0;while(num>=10) { //計算數字和result+=num%10; //個位num=num/10;}result+=num;}return result; } 推薦代碼:
public class Solution { public int addDigits(int num) { return 1 + (num-1) % 9; } } 題目筆記:
Roman to Integer 羅馬數字轉換考察switch和數字各個位數轉換

int getNumToInt(char ch) {//此題需要注意switch寫法和羅馬數字計算switch(ch) {case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; default: return 0; }return 0; }int romanToInt(char* s) {/*1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}1000~3000: {"M", "MM", "MMM"}如果當前處理的字符對應的值和上一個字符一樣,那么臨時變量加上這個字符。比如III = 3如果當前比前一個大,說明這一段的值應該是當前這個值減去前面記錄下的臨時變量中的值。比如IIV = 5 – 2如果當前比前一個小,那么就可以先將臨時變量的值加到結果中,然后開始下一段記錄。比如VI = 5 + 1DCXXI=500+100+10+10+1=621*/int length;int i,j;int result; //結果int last; //前一個值int curr; //當前值int num; //臨時變量length = strlen(s);last = getNumToInt(s[0]);num = last;for(i=1; i<length; i++) {curr = getNumToInt(s[i]);if(curr == last) { num += curr;}else if(curr < last) {result += num;num = curr;}else if(curr > last) {num = curr - num;}last = curr; }result += num;return result; }
PS:我代碼的缺點包括:我喜歡過于復雜的注釋,而直觀的代碼好于注釋;代碼中的臨時變量轉換過多,需要更精簡;字符串數組操作習慣計算長度后s[i],而不是使用*s。

(By:Eastmount 2015-9-8 下午6點半? ?http://blog.csdn.net/eastmount/)

總結

以上是生活随笔為你收集整理的[LeetCode] Add Digits - 数字各个位数求和的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。