• [Swift]LeetCode258. 各位相加 | Add Digits


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9751064.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

    Example:

    Input: 38
    Output: 2 
    Explanation: The process is like: 3 + 8 = 11, 1 + 1 = 2. 
                 Since 2 has only one digit, return it.
    

    Follow up:
    Could you do it without any loop/recursion in O(1) runtime?

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

    示例:

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

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


    20ms

    1 class Solution {
    2     func addDigits(_ num: Int) -> Int {
    3         return (num - 1)%9 + 1 
    4     }
    5 }

    24ms

     1 class Solution {
     2     func addDigits(_ num: Int) -> Int {
     3         var num = num
     4 
     5         while num >= 10 {
     6             var x = 0
     7             while num > 0 {
     8                 x += num % 10
     9                 num /= 10
    10             }
    11             num = x
    12         }
    13 
    14         return num
    15     }
    16 }

    24ms

     1 class Solution {
     2     
     3     func addDigits(_ num: Int) -> Int {
     4         guard num > 9 else { return num }
     5         
     6         var digits = [Int]()
     7         var number = num
     8         
     9         while true {
    10             digits.removeAll()
    11             
    12             while number > 0 {
    13                 digits.append(number % 10)
    14                 number /= 10
    15             }
    16             
    17             if digits.count > 1 {
    18                 number = digits.reduce(0, +)
    19             } else {
    20                 number = digits.first ?? 0
    21                 break
    22             }
    23         }
    24         
    25         return number
    26     }
    27 }
  • 相关阅读:
    架构基础-容量评估
    golang版本实现版本号比较-从易到解决bug
    数组模拟栈
    稀疏数组
    密码生成器
    01-gopsutil包使用
    02从零开始学习GO语言--标识符、关键字、变量和常量
    Go语言简介
    从零开始学习GO语言-搭建Go语言开发环境-快速开发入门第一个小程序
    ES6学习总结之 Module
  • 原文地址:https://www.cnblogs.com/strengthen/p/9751064.html
Copyright © 2020-2023  润新知