【LeeCode】2243. 计算字符串的数字和

时间:2023-01-08 07:22:59

【题目描述】

给你一个由若干数字(​​0​​​ - ​​9​​​)组成的字符串 ​​s​​ ,和一个整数。

如果 ​​s​​ 的长度大于 ​​k​​ ,则可以执行一轮操作。在一轮操作中,需要完成以下工作:

  1. 将 ​​s​​ 拆分 成长度为 ​​k​​ 的若干 连续数字组 ,使得前 ​​k​​ 个字符都分在第一组,接下来的 ​​k​​ 个字符都分在第二组,依此类推。注意,最后一个数字组的长度可以小于 ​​k​​ 。
  2. 用表示每个数字组中所有数字之和的字符串来 替换 对应的数字组。例如,​​"346"​​ 会替换为 ​​"13"​​ ,因为 ​​3 + 4 + 6 = 13​​ 。
  3. 合并 所有组以形成一个新字符串。如果新字符串的长度大于 ​​k​​ 则重复第一步。

返回在完成所有轮操作后的 ​​s​​ 。

【示例】

【LeeCode】2243. 计算字符串的数字和


【代码】

【代码】admin

思路: 把字符串s按k的长度进行切割存储在list中, 然后把list中的元素进行遍历相加存储在字符串sb中返回; 只要s的长度大于k 就再次进行计算直到符合题意

// 2023-1-7

import java.util.ArrayList;
import java.util.Arrays;
import java.util.*;

class Solution {
public String digitSum(String s, int k) {
if (s.length() <= k) return s;
while (s.length() > k){
s = check(s, k);
}
// System.out.println(s);
return s;
}

private String check(String s, int k) {
List<String> list = new ArrayList<>();;
while (s.length() > k){
list.add(s.substring(0, k));
s = s.substring(k);
}
list.add(s);
StringBuilder sb = new StringBuilder();
if (list.size() != 0){
for(String x : list){
int sum = 0;
for(int i = 0; i < x.length(); i++){
sum += Integer.parseInt(x.charAt(i)+"");
}
sb.append(String.valueOf(sum));
}
}
return sb.toString();
}
}
public class Test {
public static void main(String[] args) {
new Solution().digitSum("1234", 2); // 输出: "37"
new Solution().digitSum("11111222223", 3); // 输出: "135"
new Solution().digitSum("00000000", 3); // 输出: "000"
}
}

【代码】admin1

跟【admin】的思路基本一致, 只是改用递归迭代的思路了

// 2023-1-7

import java.util.ArrayList;
import java.util.Arrays;
import java.util.*;

class Solution {
public String digitSum(String s, int k) {
// 递归终止条件
if (s.length() <= k) return s;

List<String> list = new ArrayList<>();;
while (s.length() > k){
list.add(s.substring(0, k));
s = s.substring(k);
}
list.add(s);
StringBuilder sb = new StringBuilder();
if (list.size() != 0){
for(String x : list){
int sum = 0;
for(int i = 0; i < x.length(); i++){
sum += Integer.parseInt(x.charAt(i)+"");
}
sb.append(String.valueOf(sum));
}
}
s = sb.toString();
return digitSum(s, k);
}
}
public class Test {
public static void main(String[] args) {
new Solution().digitSum("1234", 2); // 输出: "37"
new Solution().digitSum("11111222223", 3); // 输出: "135"
new Solution().digitSum("00000000", 3); // 输出: "000"
}
}