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

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

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?

解题思路:

解法一(mycode):

模拟法,不断将数字拆分然后相加,直到只有一位数。

 

 

int addDigits(int num) {
int tmp = 0;
while(num + tmp >= 10)
 
{
tmp += num % 10;
num /= 10;
if(num < 10)
{
num += tmp;
tmp = 0;
}
}
return num;
}

 

解法二:

题目要求没有递归,没有循环,且时间复杂度为O(1)。那就找规律。

~input: 0 1 2 3 4 ... output: 0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 ....注意到,后面都是1-9不断循环。

有两个公式:

d(n) = num%9 == 0 ? (num==0? 0 : 9) : num%9

d(n) = 1 + (n-1) % 9

 

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

 

转载于:https://www.cnblogs.com/dylqt/p/5587390.html

你可能感兴趣的文章
Js 截取字符串
查看>>
cf 1015 E1. Stars Drawing (Easy Edition)
查看>>
随便聊聊
查看>>
一个css小bug
查看>>
dynamic web module讲解
查看>>
Homework template (latex)
查看>>
[No0000109]Git2/9-安装Git
查看>>
基于jQuery插件的日期选择器
查看>>
HTM基础之HTML标签
查看>>
1013 数素数 (20 分)
查看>>
C#_模拟webAp_POST-GET-PUT-DELETE
查看>>
[xUI] ligerUI开发框架简介和搭建
查看>>
称砝码算法//输入与算法分开
查看>>
Win & Mac 系统之间U盘传递的U盘文件格式选取问题
查看>>
Python Web学习笔记之WebSocket原理说明
查看>>
面试必问---HashMap原理分析
查看>>
Android学习笔记——Menu(一)
查看>>
LeetCode_Recover Binary Search Tree
查看>>
Java中的异常和处理详解
查看>>
redhat更改yum源及安装PHP环境
查看>>