Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/1945.html

1945. Sum of Digits of String After Convert

Level

Easy

Description

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:

Input: s = “iiii”, k = 1

Output: 36

Explanation: The operations are as follows:

  • Convert: “iiii” ➝ “(9)(9)(9)(9)” ➝ “9999” ➝ 9999
  • Transform #1: 9999 ➝ 9 + 9 + 9 + 9 ➝ 36

Thus the resulting integer is 36.

Example 2:

Input: s = “leetcode”, k = 2

Output: 6

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.

Solution

Since k >= 1, at least one transform operation is needed. Therefore, transform s into an integer, which is guaranteed to fit in a 32-bit integer. Then do the transform for another k - 1 times.

  • class Solution {
        public int getLucky(String s, int k) {
            StringBuffer sb = new StringBuffer();
            int length = s.length();
            for (int i = 0; i < length; i++) {
                char c = s.charAt(i);
                int num = c - 'a' + 1;
                sb.append(num);
            }
            int sum = 0;
            int digitLength = sb.length();
            for (int i = 0; i < digitLength; i++) {
                int digit = sb.charAt(i) - '0';
                sum += digit;
            }
            for (int i = 2; i <= k; i++)
                sum = convert(sum);
            return sum;
        }
    
        public int convert(int num) {
            int sum = 0;
            while (num > 0) {
                sum += num % 10;
                num /= 10;
            }
            return sum;
        }
    }
    
    ############
    
    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);
        }
    }
    
  • // OJ: https://leetcode.com/contest/weekly-contest-251/problems/sum-of-digits-of-string-after-convert/
    // Time: O(NK)
    // Space: O(N)
    class Solution {
    public:
        int getLucky(string s, int k) {
            string tmp;
            for (char c : s) tmp += to_string(c - 'a' + 1);
            int n = 0;
            for (char c : tmp) n += c - '0';
            for (int i = 1; i < k; ++i) {
                int next = 0;
                while (n) {
                    next += n % 10;
                    n /= 10;
                }
                n = next;
            }
            return n;
        }
    };
    
  • 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)
    
    ############
    
    # 1945. Sum of Digits of String After Convert
    # https://leetcode.com/problems/sum-of-digits-of-string-after-convert/
    
    class Solution:
        def getLucky(self, s: str, k: int) -> int:
            ss = ''
            
            for c in s:
                ss += str(ord(c) - ord('a') + 1)
    
            for _ in range(k):
                ss = str(sum(int(i) for i in ss))
                
            return int(ss)
    
    
  • 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);
        }
    }
    

All Problems

All Solutions