【LeetCode 258】刷题打卡Day1

104 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

最近看到掘金的活动,正巧也督促自己刷刷力扣,保持一下手感,打卡第一天,题目来源leetcode每日一题

一、题目描述

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

示例 1:

输入: num = 38

输出: 2

解释: 各位相加的过程为:

38 --> 3 + 8 --> 11

11 --> 1 + 1 --> 2

由于 2 是一位数,所以返回 2。

提示:

  • 0 <= num <= 231 - 1

二、思路分析

使用循环,思路清晰。

1、把数字转成字符串

2、while循环直到得到一位数结果输出答案

3、循环体内使用数组的reduce方法进行累加,记得累加前转换为number,累加后再转换为string

三、AC 代码

/**
 * @param {number} num
 * @return {number}
 */
var addDigits = function(num) {
    let str = num.toString();
    while(str.length>1){
        let res = str.split('').reduce((a,b)=>{
            return +a + +b;
        })
        str = res.toString();
    }
    return +str
};

复杂度分析 :时间空间均为O(log⁡ num)

四、总结

思路很简单,重点在于类型的转换和累加的操作。

常用转换方法+ str 把str转化为number

图片.png