【LeetCode】258. 各位相加

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐

  1. LeetCode258. 各位相加

    2023-12-07 04:42:02       61 阅读
  2. LeetCode258. Add Digits

    2023-12-07 04:42:02       66 阅读
  3. leetcode】大数相加

    2023-12-07 04:42:02       37 阅读
  4. leetcode415:字符串相加

    2023-12-07 04:42:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 04:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 04:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 04:42:02       82 阅读
  4. Python语言-面向对象

    2023-12-07 04:42:02       91 阅读

热门阅读

  1. Vue中的组件通信:从子到父的数据传递

    2023-12-07 04:42:02       65 阅读
  2. C++设计模式——建造者模式(Builder)

    2023-12-07 04:42:02       76 阅读
  3. ES6拓展API

    2023-12-07 04:42:02       55 阅读
  4. Socket.D 网络应用协议,首版发布!

    2023-12-07 04:42:02       59 阅读
  5. 字符指针变量

    2023-12-07 04:42:02       54 阅读
  6. 数据结构-基数排序

    2023-12-07 04:42:02       62 阅读
  7. 利用 Python 进行数据分析实验(二)

    2023-12-07 04:42:02       61 阅读
  8. linux系统调用介绍

    2023-12-07 04:42:02       65 阅读
  9. Vue的methods中定时器的变量报错问题

    2023-12-07 04:42:02       60 阅读
  10. C++ day50 买卖股票最佳时机

    2023-12-07 04:42:02       63 阅读
  11. linux优化-平均负载率

    2023-12-07 04:42:02       57 阅读
  12. 数据结构 / 队列 / 循环队列 / 结构体定义和创建

    2023-12-07 04:42:02       66 阅读
  13. vue的模板语法

    2023-12-07 04:42:02       66 阅读
  14. 使用右值常量进行测试的boost::foreach模块

    2023-12-07 04:42:02       62 阅读
  15. Vue经典面试题源码级分析【一】

    2023-12-07 04:42:02       60 阅读