258. Add Digits 【递归】

 

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?

 

class Solution:
    def addDigits(self, num):
        """
        :type num: int
        :rtype: int
        """
        a=len(str(num))
        y=0
        for i in range(a):
            y=num%10+y
            num=num//10
        if y<10:
            return y
        else:
            return self.addDigits(y)
            
            
            
            
            

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个经典的回溯算法问题。以下是Kotlin的实现代码: ```kotlin class Solution { private val letterMap = arrayOf("", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz") private val result = mutableListOf<String>() fun letterCombinations(digits: String): List<String> { if (digits.isEmpty()) { return emptyList() } backtrack(digits, 0, StringBuilder()) return result } private fun backtrack(digits: String, index: Int, combination: StringBuilder) { if (index == digits.length) { result.add(combination.toString()) return } val digit = digits[index].toString().toInt() val letters = letterMap[digit] for (i in letters.indices) { combination.append(letters[i]) backtrack(digits, index + 1, combination) combination.deleteCharAt(combination.length - 1) } } } ``` 我们先定义了一个字母表,将数字映射到对应的字母组合上。接着定义了一个结果集合`result`。在函数`letterCombinations`中,我们首先判断特殊情况,如果数字串为空,则返回空列表。否则,我们开始递归调用回溯函数`backtrack`。 在回溯函数中,我们首先判断是否已经到达数字串的末尾,如果到达,则将当前的组合字符串加入结果集合中。否则,我们取出当前数字所对应的字母组合,对于每一个字母,都将其加入到组合字符串中,并递归调用`backtrack`函数,最后将该字母从组合字符串中删除(回溯到上一步)。 这样,当回溯函数返回时,我们就可以得到所有的字母组合了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值