【LeeCode】1945. 字符串转化后的各位数字之和
原创
©著作权归作者所有:来自51CTO博客作者51玖拾柒的原创作品,请联系作者获取转载授权,否则将追究法律责任
【题目描述】
给你一个由小写字母组成的字符串 s
,以及一个整数 k
。
首先,用字母在字母表中的位置替换该字母,将 s
转化 为一个整数(也就是,'a'
用 1
替换,'b'
用 2
替换,... 'z'
用 26
替换)。接着,将整数 转换 为其 各位数字之和 。共重复 转换 操作 k
次 。
例如,如果 s = "zbax"
且 k = 2
,那么执行下述步骤后得到的结果是整数 8
:
- 转化:
"zbax" ➝ "(26)(2)(1)(24)" ➝ "262124" ➝ 262124
- 转换 #1:
262124 ➝ 2 + 6 + 2 + 1 + 2 + 4 ➝ 17
- 转换 #2:
17 ➝ 1 + 7 ➝ 8
返回执行上述操作后得到的结果整数。
【示例】
【代码】admin
import java.util.*;
// 2022-12-15
class Solution{
public int getLucky(String str, int k) {
StringBuilder sb = new StringBuilder();
char[] chars = str.toCharArray();
for (char c : chars) {
sb.append(Integer.valueOf(c - 97 + 1)); //记录每一个字符
}
int sum; // 求和
String tmp = sb.toString(); // tmp临时字符
while (k > 1){ // k > 1的时候迭代计算,每次sum从0开始
sum = 0;
for (char c : tmp.toCharArray()) { // 单独计算每个字符的求和
sum += Integer.parseInt(c+"");
}
tmp = String.valueOf(sum);
k--;
}
sum = 0;
for (char c : tmp.toCharArray()) {
sum += Integer.parseInt(c+"");
}
//System.out.println(sum);
return sum;
}
}
public class Main{
public static void main(String[] args) {
String str = "iiii";
int k = 1;
new Solution().getLucky(str, k); // 输出: 36
String str1 = "leetcode";
int k1 = 2;
new Solution().getLucky(str1, k1); // 输出: 6
String str2 = "dbvmfhnttvr";
int k2 = 5;
new Solution().getLucky(str2, k2); // 输出: 5
}
}
【代码】优解
学习参考
import java.util.*;
// 2022-12-15
class Solution{
public int getLucky(String str, int k) {
int ans = 0;
for (char c : str.toCharArray()) ans += get(c - 'a' + 1);
for (int i = 1; i < k; i++) ans = get(ans);
return ans;
}
public int get(int t){
int ans = 0;
while (t > 0){
ans += t % 10;
t /= 10;
}
return ans;
}
}
public class Main{
public static void main(String[] args) {
String str = "iiii";
int k = 1;
new Solution().getLucky(str, k); // 输出: 36
String str1 = "leetcode";
int k1 = 2;
new Solution().getLucky(str1, k1); // 输出: 6
String str2 = "dbvmfhnttvr";
int k2 = 5;
new Solution().getLucky(str2, k2); // 输出: 5
}
}