列表

详情


1945. 字符串转化后的各位数字之和

给你一个由小写字母组成的字符串 s ,以及一个整数 k

首先,用字母在字母表中的位置替换该字母,将 s 转化 为一个整数(也就是,'a'1 替换,'b'2 替换,... 'z'26 替换)。接着,将整数 转换 为其 各位数字之和 。共重复 转换 操作 k

例如,如果 s = "zbax"k = 2 ,那么执行下述步骤后得到的结果是整数 8

返回执行上述操作后得到的结果整数。

 

示例 1:

输入:s = "iiii", k = 1
输出:36
解释:操作如下:
- 转化:"iiii" ➝ "(9)(9)(9)(9)" ➝ "9999" ➝ 9999
- 转换 #1:9999 ➝ 9 + 9 + 9 + 9 ➝ 36
因此,结果整数为 36 。

示例 2:

输入:s = "leetcode", k = 2
输出:6
解释:操作如下:
- 转化:"leetcode" ➝ "(12)(5)(5)(20)(3)(15)(4)(5)" ➝ "12552031545" ➝ 12552031545
- 转换 #1:12552031545 ➝ 1 + 2 + 5 + 5 + 2 + 0 + 3 + 1 + 5 + 4 + 5 ➝ 33
- 转换 #2:33 ➝ 3 + 3 ➝ 6
因此,结果整数为 6 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int getLucky(string s, int k) { } };

python3 解法, 执行用时: 44 ms, 内存消耗: 15.1 MB, 提交时间: 2022-12-15 09:36:22

class Solution:
    def getLucky(self, s: str, k: int) -> int:
        digits = "".join(str(ord(ch) - ord("a") + 1) for ch in s)

        for i in range(k):
            if len(digits) == 1:
                break
            total = sum(int(ch) for ch in digits)
            digits = str(total)
        
        return int(digits)

golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2021-07-30 10:18:31

func getLucky(s string, k int) (sum int) {
	for _, b := range s {
		b -= 'a' - 1
		sum += int(b/10 + b%10)
	}
	k--
	for ; k > 0 && sum > 9; k-- { // sum < 10 时可以提前退出
		s := sum
		for sum = 0; s > 0; s /= 10 {
			sum += s % 10
		}
	}
	return
}

上一题