LC.Sum of Digits of String After Convert
题目
You are given a string s consisting of lowercase English letters, and an integer k.
First, convert s into an integer by replacing each letter with its position in the alphabet (i.e., replace ‘a’ with 1, ‘b’ with 2, …, ‘z’ with 26). Then, transform the integer by replacing it with the sum of its digits. Repeat the transform operation k times in total.
For example, if s = “zbax” and k = 2, then the resulting integer would be 8 by the following operations:
Convert: "zbax" ➝ "(26)(2)(1)(24)" ➝ "262124" ➝ 262124
Transform #1: 262124 ➝ 2 + 6 + 2 + 1 + 2 + 4 ➝ 17
Transform #2: 17 ➝ 1 + 7 ➝ 8
Return the resulting integer after performing the operations described above.
Example 1:
1 | Input: s = "iiii", k = 1 |
- Convert: “iiii” ➝ “(9)(9)(9)(9)” ➝ “9999” ➝ 9999
- Transform #1: 9999 ➝ 9 + 9 + 9 + 9 ➝ 36
Thus the resulting integer is 36.
Example 2:
1 | Input: s = "leetcode", k = 2 |
Explanation: The operations are as follows:
- Convert: “leetcode” ➝ “(12)(5)(5)(20)(3)(15)(4)(5)” ➝ “12552031545” ➝ 12552031545
- Transform #1: 12552031545 ➝ 1 + 2 + 5 + 5 + 2 + 0 + 3 + 1 + 5 + 4 + 5 ➝ 33
- Transform #2: 33 ➝ 3 + 3 ➝ 6
Thus the resulting integer is 6.
Example 3:
Input: s = “zbax”, k = 2
Output: 8
Constraints:
1 <= s.length <= 100
1 <= k <= 10
s consists of lowercase English letters.
解题思路
模拟
这题Python与其他语言不一样,因为Python的int理论上是无穷大的,所以可以直接转换
其他语言需要string最后转换成int
当digit长度为1时无论操作(operation)几次,最终的结果都是一样的
代码
Python
1 | class Solution: |
C++
1 | class Solution { |
Go
func getLucky(s string, k int) int {
t := make([]byte, 0, 10)
for _, c := range s{
t = append(t, strconv.Itoa(int(c - 'a' + 1))...)
}
digit := string(t)
for ; k > 0 && len(digit) > 1; k--{
num := 0
for _, c := range digit{
num += int(c - '0')
}
digit = strconv.Itoa(num)
}
ans, _ := strconv.Atoi(digit)
return ans
}
