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