【LeetCode】258. 各位相加

news/2024/10/22 10:36:11/

258. 各位相加

难度:简单

题目

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。

示例 1:

输入: num = 38
输出: 2 
解释: 各位相加的过程为:
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
由于 2 是一位数,所以返回 2。

示例 2:

输入: num = 0
输出: 0

提示:

  • 0 <= num <= 2^31 - 1

**进阶:**你可以不使用循环或者递归,在 O(1) 时间复杂度内解决这个问题吗?

个人题解

方法一:打表法

思路:

  1. 显然,由题目可知,这是一道找规律的题目
  2. 先编写不管复杂度的程序,将10000以下对应的的答案打印出来,观察规律
public class Main {public static void main(String[] args) {Main main = new Main();for (int i = 0; i < 10000; i++) {System.out.println(main.addDigits(i) + " " + i);}}public int addDigits(int num) {while (num >= 10) {int sum = 0;while (num >= 10) {sum += num % 10;num /= 10;}num = sum + num;}return num;}}

观察输出,除了小于 10 的数,后面数字都是一直从 1~9 逐位递增,观察规律,当能被 9 整除时,对应答案是 9,否则是 除以9 的余数,则编写以下代码:

class Solution {public int addDigits(int num) {if (num < 10) {return num;}return num % 9 == 0 ? 9 : num % 9;}
}

复杂度分析

  • 时间复杂度:O(1)
  • 空间复杂度:O(1)

官方题解

方法一:模拟

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

复杂度分析

  • 时间复杂度:O(log num)
  • 空间复杂度:O(1)

方法二:数学

从数学角度分析答题,题解字数很多,本人不想看,想看的可直接点击后面链接查看

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

复杂度分析

  • 时间复杂度:O(1)
  • 空间复杂度:O(1)

作者:力扣官方题解
链接:https://leetcode.cn/problems/add-digits/solutions/1301157/ge-wei-xiang-jia-by-leetcode-solution-u4kj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


http://www.ppmy.cn/news/1259760.html

相关文章

【Android踩过的坑】13.Android Studio 运行成功,但APP没有安装上的问题

【Android踩过的坑】13.Android Studio 运行成功&#xff0c;但APP没有安装上的问题 解决办法&#xff1a; 在app的build.gradle文件下添加以下代码 android {...//android.useNewApkCreatorfalse 在高版本gradle下无效&#xff0c;添加以下代码解决冲突即可packagingOptions…

案例058:基于微信小程序的智能社区服务系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【Pytorch】理解自动混合精度训练

【Pytorch】理解自动混合精度训练 混合精度概述 实验对比 更大的深度学习模型需要更多的计算能力和内存资源。一些新技术的提出&#xff0c;可以更快地训练深度神经网络。我们可以使用 FP16&#xff08;半精度浮点数格式&#xff09;来代替 FP32&#xff08;全精度浮点数格式…

实战中使用的策略模式,使用@ConditionalOnProperty实现根据环境注册不同的bean

场景复现 举个例子&#xff0c;针对不同的设备的内存的不同加载一些资源的时候需要采取不同的策略&#xff0c;比如&#xff0c;在内存比较大的设备&#xff0c;可以一次性加载&#xff0c;繁殖需要使用懒加载&#xff0c;这个时候我们就可以采用配置文件配置中心去控制了 Cond…

吴恩达《机器学习》11-1-11-2:首先要做什么、误差分析

一、首先要做什么 选择特征向量的关键决策 以垃圾邮件分类器算法为例&#xff0c;首先需要决定如何选择和表达特征向量 &#x1d465;。视频提到的一个示例是构建一个由 100 个最常出现在垃圾邮件中的词构成的列表&#xff0c;根据这些词是否在邮件中出现来创建特征向量&…

科技论文中的Assumption、Remark、Property、Lemma、Theorem、Proof含义

一、背景 学控制、数学、自动化专业的学生在阅读论文时&#xff0c;经常会看到Assumption、Remark、Property、Lemma、Theorem、Proof等单词&#xff0c;对于初学者可能不太清楚他们之间的区别&#xff0c;因此这里做一下详细的说明。 以机器人领域的论文为例。 论文题目&…

【从0配置JAVA项目相关环境1】jdk + VSCode运行java + mysql + Navicat + 数据库本地化 + 启动java项目

从0配置JAVA项目相关环境 写在最前面一、安装Java的jdk环境1. 下载jdk2. 配置jdk3. 配置环境变量 二、在vscode中配置java运行环境1. 下载VSCode2. 下载并运行「Java Extension Pack」 三、安装mysql1.官网下载MySQL2.开始安装如果没有跳过安装成功 3.配置MySQL Server4.环境变…

STM32串口接收数据包(自定义帧头帧尾)

1、基本概述 本实验基于stm32c8t6单片机&#xff0c;串口作为基础且重要的外设&#xff0c;具有广泛的应用。本文主要理解串口数据包的发送与接收是如何实现的&#xff0c;重要的是理解程序的实现思路。 2、关键程序 定义好需要用到的变量&#xff1a; uint8_t rxd_buf[4];//…