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

本文共 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 = 111 + 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的就返回。下面是一种递归的方法。

public class Solution {    public int addDigits(int num) {        if(num < 10) {            return num;        }        //1023        int t = 0;        while(num >= 1) {            t += num % 10;            num = num / 10;        }                return addDigits(t);    }}

  那么怎么做才能不用递归和循环迭代来把复杂度降到O(1)呢,这让我联想到了公式。来通过数据找找规律。

前30个数据测试:

public static void main(String[] args) {		for(int i=0; i<30; i++) {			System.out.println(i + " " + addDigits(i));		}	}

  

0 0

1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 1
11 2
12 3
13 4
14 5
15 6
16 7
17 8
18 9
19 1
20 2
21 3
22 4
23 5
24 6
25 7
26 8
27 9
28 1
29 2

找出来规律了吧。

其实是这样的:(num-1) % 9 + 1

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

 

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

你可能感兴趣的文章
基于Token的身份验证——JWT(转)
查看>>
Maven(五)之Maven配置阿里云镜像飞快下jar包
查看>>
Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解
查看>>
script 里写 html 模版
查看>>
vue2.0 + vux (三)MySettings 页
查看>>
ASP.NET Core 使用 Alipay.AopSdk.Core 常见问题解答
查看>>
spring @Value 设置默认值
查看>>
带你从零学ReactNative开发跨平台App开发(十一)
查看>>
java 生成zip文件并导出
查看>>
atitit.userService 用户系统设计 v4 q316 .doc
查看>>
1224 - 搞定 iText 识别文字后翻译
查看>>
《iOS 8开发指南(第2版)》——第6章,第6.3节在Xcode中实现MVC
查看>>
机器人快速崛起:5年内消失510万工作岗位
查看>>
内存泄漏和内存溢出的区别
查看>>
pageinspect分析btree索引结构
查看>>
Jtable Auto Resize Column
查看>>
如何友好地展示findbugs分析报告
查看>>
postgresql 时间类型和相关函数
查看>>
JavaScript权威设计--JavaScript语言核心(简要学习笔记一)
查看>>
”一个封锁操作被对 WSACancelBlockingCall 的调用中断“。解决办法
查看>>