返回介绍

solution / 1900-1999 / 1945.Sum of Digits of String After Convert / README

发布于 2024-06-17 01:03:12 字数 4609 浏览 0 评论 0 收藏 0

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

English Version

题目描述

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

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

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

  • 转化:"zbax" ➝ "(26)(2)(1)(24)" ➝ "262124" ➝ 262124
  • 转换 #1262124 ➝ 2 + 6 + 2 + 1 + 2 + 4 ➝ 17
  • 转换 #217 ➝ 1 + 7 ➝ 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 。

 

提示:

  • 1 <= s.length <= 100
  • 1 <= k <= 10
  • s 由小写英文字母组成

解法

方法一:模拟

根据题目描述进行模拟即可。

时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 $s$ 的长度。

class Solution:
  def getLucky(self, s: str, k: int) -> int:
    s = ''.join(str(ord(c) - ord('a') + 1) for c in s)
    for _ in range(k):
      t = sum(int(c) for c in s)
      s = str(t)
    return int(s)
class Solution {
  public int getLucky(String s, int k) {
    StringBuilder sb = new StringBuilder();
    for (char c : s.toCharArray()) {
      sb.append(c - 'a' + 1);
    }
    s = sb.toString();
    while (k-- > 0) {
      int t = 0;
      for (char c : s.toCharArray()) {
        t += c - '0';
      }
      s = String.valueOf(t);
    }
    return Integer.parseInt(s);
  }
}
class Solution {
public:
  int getLucky(string s, int k) {
    string t;
    for (char c : s) t += to_string(c - 'a' + 1);
    s = t;
    while (k--) {
      int t = 0;
      for (char c : s) t += c - '0';
      s = to_string(t);
    }
    return stoi(s);
  }
};
func getLucky(s string, k int) int {
  var t strings.Builder
  for _, c := range s {
    t.WriteString(strconv.Itoa(int(c - 'a' + 1)))
  }
  s = t.String()
  for k > 0 {
    k--
    t := 0
    for _, c := range s {
      t += int(c - '0')
    }
    s = strconv.Itoa(t)
  }
  ans, _ := strconv.Atoi(s)
  return ans
}
function getLucky(s: string, k: number): number {
  let ans = '';
  for (const c of s) {
    ans += c.charCodeAt(0) - 'a'.charCodeAt(0) + 1;
  }
  for (let i = 0; i < k; i++) {
    let t = 0;
    for (const v of ans) {
      t += Number(v);
    }
    ans = `${t}`;
  }
  return Number(ans);
}
impl Solution {
  pub fn get_lucky(s: String, k: i32) -> i32 {
    let mut ans = String::new();
    for c in s.as_bytes() {
      ans.push_str(&(c - b'a' + 1).to_string());
    }
    for _ in 0..k {
      let mut t = 0;
      for c in ans.as_bytes() {
        t += (c - b'0') as i32;
      }
      ans = t.to_string();
    }
    ans.parse().unwrap()
  }
}
class Solution {
  /**
   * @param String $s
   * @param Integer $k
   * @return Integer
   */
  function getLucky($s, $k) {
    $rs = '';
    for ($i = 0; $i < strlen($s); $i++) {
      $num = ord($s[$i]) - 96;
      $rs = $rs . strval($num);
    }
    while ($k != 0) {
      $sum = 0;
      for ($j = 0; $j < strlen($rs); $j++) {
        $sum += intval($rs[$j]);
      }
      $rs = strval($sum);
      $k--;
    }
    return intval($rs);
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文