题目概述:
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 - 数字各个位数求和相关推荐

  1. leetcode Add Digits

    题目连接 https://leetcode.com/problems/add-digits/ Add Digits Description Given a non-negative integer n ...

  2. [LeetCode] Add Digits

    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...

  3. LeetCode Add Digits(计算数位的和)

    题意:给出一个数,求将其各位数相加起来后的和,直到小于10 思路:参考https://en.wikipedia.org/wiki/Digital_root 代码如下: public class Sol ...

  4. Leetcode刷题记录[python]——258 Add Digits

    一.前言 做这题有个小收获,关于Digital root的解法,有个极方便的小公式: 二.题258 Add Digits Given a non-negative integer num, repea ...

  5. Python 接受输入数字,并求和 (异常,跳出死循环换)

    Python 接受输入数字,并求和 (异常,跳出死循环换) 参考文章: (1)Python 接受输入数字,并求和 (异常,跳出死循环换) (2)https://www.cnblogs.com/buer ...

  6. LeetCode Add Two Numbers II(栈)

    问题:给出两个链表表示的整数,求其和 思路:因为链表的第一个结点是最高位,最后一个结点是最低位.先将两个链表放入两个栈中.然后从两个栈中取出元素,从低到高位相加. 具体代码参考: https://gi ...

  7. LeetCode Add and Search Word - Data structure design(字典树)

    问题:设计一个支持addWord,search查询的数据结构,要求search支持.正则查询 思路:使用Trie数据结构,在匹配.时,从子结点中选取可行的一个继续匹配下一个字符,主要思路是基于递归 具 ...

  8. 计算数字的位数并逆序输出

    根据控制台文本提示输入一个数,这个数不能大于5位,并且要求是一个整数,程序会输出你输入数字的位数并且会输出每个数字在第几位,然后进行逆序输出显示. 结果演示 代码演示 package com.five ...

  9. c++获取输入数字的位数/获取位数并且将其存入数组中/获取位数存入数组并且利用它解决实际问题

    1.仅仅获取数字的位数: int checkNumber(int num){int weishu = 0;for (int i = 1, num1 = num, shuzu = 0; num / i; ...

最新文章

  1. BZOJ 2143 飞飞侠(线段树优化建边 / 并查集优化最短路)【BZOJ修复工程】
  2. CF183D T-shirt
  3. EditText的各种属性
  4. 解决朋友圈压缩_朋友中最有趣的朋友[已解决]
  5. 两个不同的数据库如何跨库事务
  6. java如何遍历combobox_如何通过COMBOBOX设置Java中的框架标题?
  7. *args, **kwargs
  8. 2020.3二级中选择题文件类型题目全套
  9. 【5步解决】打开Word 2016时出现MathType has detected an error in AutoExecCls.Main 以及 文件未找到:MathPage.WILL.亲测完美方案
  10. 计算机硬件软件基础知识(小白)
  11. (Python编程)稳定的copra算法(copra-ep)
  12. CARBON X1 安装 chrome os
  13. 所属学院mid函数计算机学院,EXCEL答案公式==
  14. mongoose时间自动转化为格林尼治标准时间的解决方案
  15. 淘宝CRM是如何通过数据分析进行解决问题的
  16. Java将文件转换成二维码
  17. C++统计一个文件的行数,大写字母数,小写字母数,数字数
  18. 实现链表的插入——头插/尾插
  19. 少儿C++编程从入门到进阶 信奥学奥赛从启蒙到NOI、ACM-ICPC(一)
  20. 如何用爬虫工具实现竞对价格监控

热门文章

  1. 重建控制文件的案例(RESETLOGS模式和NORESETLOGS模式)
  2. 如何创建Oracle DBLink
  3. 连号区间数(2013年第四届c/c++ b组第10题)
  4. 微信小程序使用adb工具
  5. Eclipse + Apache Axis2 发布RESTful WebService(一)基础知识
  6. chosen组件实现下拉框
  7. 输入输出(Input and Output)
  8. 微软BI 之SSAS 系列 - 在SQL Server 2012 中开发 Analysis Services Multidimensional Project
  9. lcd残影原理_为什么同样是高刷,OLED 可以比 LCD 优秀?
  10. html抽奖源码_开源FPGA开发板OpenICE 介绍及抽奖