From 0391e520514e06a7fd837b595f8e126fe217dfaf Mon Sep 17 00:00:00 2001 From: Hao Chen Date: Fri, 12 Nov 2021 14:59:12 +0800 Subject: [PATCH] New Problem Solution - "1945. Sum of Digits of String After Convert" --- README.md | 1 + .../SumOfDigitsOfStringAfterConvert.cpp | 77 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 sumOfDigitsOfStringAfterConvert/SumOfDigitsOfStringAfterConvert.cpp diff --git a/README.md b/README.md index 20a9c568..4345c749 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ LeetCode | # | Title | Solution | Difficulty | |---| ----- | -------- | ---------- | +|1945|[Sum of Digits of String After Convert](https://leetcode.com/problems/sum-of-digits-of-string-after-convert/) | [C++](/Users/chenhao/GitHub/leetcode/sumOfDigitsOfStringAfterConvert/SumOfDigitsOfStringAfterConvert.cpp)|Easy| |1935|[Maximum Number of Words You Can Type](https://leetcode.com/problems/maximum-number-of-words-you-can-type/) | [C++](./algorithms/cpp/maximumNumberOfWordsYouCanType/MaximumNumberOfWordsYouCanType.cpp)|Easy| |1882|[Process Tasks Using Servers](https://leetcode.com/problems/process-tasks-using-servers/) | [C++](./algorithms/cpp/processTasksUsingServers/ProcessTasksUsingServers.cpp)|Medium| |1881|[Maximum Value after Insertion](https://leetcode.com/problems/maximum-value-after-insertion/) | [C++](./algorithms/cpp/maximumValueAfterInsertion/MaximumValueAfterInsertion.cpp)|Medium| diff --git a/sumOfDigitsOfStringAfterConvert/SumOfDigitsOfStringAfterConvert.cpp b/sumOfDigitsOfStringAfterConvert/SumOfDigitsOfStringAfterConvert.cpp new file mode 100644 index 00000000..d2dcfe72 --- /dev/null +++ b/sumOfDigitsOfStringAfterConvert/SumOfDigitsOfStringAfterConvert.cpp @@ -0,0 +1,77 @@ +// Source : https://leetcode.com/problems/sum-of-digits-of-string-after-convert/ +// Author : Hao Chen +// Date : 2021-11-12 + +/***************************************************************************************************** + * + * 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. + ******************************************************************************************************/ + +class Solution { +public: + int sumChar(char c) { + int x = c - 'a' + 1; + return x < 10 ? x : x / 10 + x % 10; + } + int sumInt(int x) { + int s = 0; + while( x > 0 ) { + s += x % 10; + x /= 10; + } + return s; + } + int getLucky(string s, int k) { + int result = 0; + for (auto c : s) { + result += sumChar(c); + } + for (; k > 1 ; k--) { + result = sumInt(result); + } + return result; + } +};