博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 258. Add Digits
阅读量:4330 次
发布时间:2019-06-06

本文共 997 字,大约阅读时间需要 3 分钟。

Problem:

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?

此题最初想法是相加、判断反复循环直到找到满足的解。通过参考别人的解答发现,此题是让我们求“”。

由此解法一为通过循环相加判断,直到找到可行解:

class Solution {public:    int addDigits(int num)     {        int add = 0;         while (num >= 10)        {            while(num > 0)            {               add += num % 10;               num /= 10;            }            num = add;        }        return num;    }};

 

但是由于时间复杂度超过题目要求,故考虑针对“数根”的解法。

通过枚举可知:   

10 1+0 = 1
11 1+1 = 2
12 1+2 = 3    
13 1+3 = 4
14 1+4 = 5
15 1+5 = 6
16 1+6 = 7
17 1+7 = 8
18 1+8 = 9
19 1+9 = 1
20 2+0 = 2

于是可得出规律,每9个一循环。为处理9的倍数的情况,我们写为(n - 1) % 9 + 1。由此可得:

class Solution {public:    int addDigits(int num)     {        return (num - 1) % 9 + 1;    }};

 

转载于:https://www.cnblogs.com/yrwang/p/6049476.html

你可能感兴趣的文章
一、 kettle开发、上线常见问题以及防错规范步骤
查看>>
eclipse没有server选项
查看>>
CRC码计算及校验原理的最通俗诠释
查看>>
QTcpSocket的连续发送数据和连续接收数据
查看>>
使用Gitbook来编写你的Api文档
查看>>
jquery扩展 $.fn
查看>>
Markdown指南
查看>>
influxDB的安装和简单使用
查看>>
JPA框架学习
查看>>
JPA、JTA、XA相关索引
查看>>
机器分配
查看>>
php opcode缓存
查看>>
springcloud之Feign、ribbon设置超时时间和重试机制的总结
查看>>
Go 结构体
查看>>
LINQ巩固
查看>>
观看杨老师(杨旭)Asp.Net Core MVC入门教程记录
查看>>
UIDynamic(物理仿真)
查看>>
Windows下安装Redis
查看>>
迷宫实现
查看>>
【字符编码】Java字符编码详细解答及问题探讨
查看>>