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

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

Description

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?

My solution

肯定是很搓的while咯...

class Solution {public:    int addDigits(int num) {        int sum=0;        int shang;        int yu;        while(true){            yu=num%10;            num/=10;            sum+=yu;            if(num==0){                if(sum<10) break;                else{                    num=sum;                    sum=0;                }            }        }        return sum;    }};

Discuss

果然有固定算法

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

主要理解下面式子:

$${\mbox{dr}}(abc)\equiv a\cdot 10^{2}+b\cdot 10+c\cdot 1\equiv a\cdot 1+b\cdot 1+c\cdot 1\equiv a+b+c{\pmod {9}}.$$

把一个数(如438)拆解:

400->40->4
30->3
8
因为10->1是mod 9, 100->1也是100=1+99也通过mod 9实现,具体原因脑子有点绕.

比较trick的方案不那么容易想到, 快速看答案就行...

Reference

转载地址:http://hxnna.baihongyu.com/

你可能感兴趣的文章
代写初中语文作文|代写初中语文作文技巧分享
查看>>
linux字符设备文件的打开操作
查看>>
Servlet介绍以及简单实例
查看>>
[js高手之路] 跟GhostWu一起封装一个字符串工具库-架构篇(1)
查看>>
Java.ftp上传下载
查看>>
【Node.js】4.从一个例子切入Node js的规范
查看>>
实施微服务架构的关键技术
查看>>
“流”的思维—Workflowy
查看>>
Day19 网络编程
查看>>
.NET平台MongoDB下使用JobStore存储Quartz.Net的Job,Trigger数据
查看>>
Java多线程编程—锁优化
查看>>
python文本 字符与字符值转换
查看>>
Linux虚拟化技术KVM、QEMU与libvirt的关系(转)
查看>>
Ceph分布式存储-原理介绍及简单部署
查看>>
MYSQL数据库设计规范与原则
查看>>
UWP: 实现 UWP 应用自启动
查看>>
Windows内核之进程的终止和子进程
查看>>
Vivado+FPGA:如何使用Debug Cores(ILA)在线调试(烧录到flash里可以直接启动)
查看>>
[Preference] How to avoid Forced Synchronous Layout or FSL to improve site preference
查看>>
【laravel5.4】php artisan migrate报错:Specified key was too long; max key length is 767 bytes
查看>>