开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情
前言
从零开始学习c++,每天起码做一道leetcode题目,在此记录,希望最后能够有所收获!
一、题目描述
给你一个由小写字母组成的字符串 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 返回执行上述操作后得到的结果整数。
二、思路分析
先开始想用数组去做,后来发现要反复加各个位上的数字,用数组很难做。
于是就想到了另一种办法,就是先把题目所给的字母字符串转化为数字字符串,然后遍历取出将字符转化为数字加起来,最后的和再转化为字符串以便下一次的相加。
最后再把字符串型转化为整型后返回。
三、AC代码
class Solution {
public:
int getLucky(string s, int k) {
string ans="" ;
long long x,result,sum=0;
for(int i=0;i<s.size();i++){
x = s[i] - 'a'+1;
ans += to_string(x);
}
for (int j = 0; j < k;j++){
for(int w = 0; w < ans.size();w++){
sum = sum + (ans[w] - '0');
}
ans = to_string(sum);
sum = 0;
}
return stoi(ans);
}
};
提交排名
四、总结
一道简单题,不过还是想了一会,虽然最后想了出来,但还不是很熟练,还要继续练习。