【题目描述】
给你一个由若干数字(0
- 9
)组成的字符串 s
,和一个整数。
如果 s
的长度大于 k
,则可以执行一轮操作。在一轮操作中,需要完成以下工作:
- 将
s
拆分 成长度为 k
的若干 连续数字组 ,使得前 k
个字符都分在第一组,接下来的 k
个字符都分在第二组,依此类推。注意,最后一个数字组的长度可以小于 k
。
- 用表示每个数字组中所有数字之和的字符串来 替换 对应的数字组。例如,
"346"
会替换为 "13"
,因为 3 + 4 + 6 = 13
。
-
合并 所有组以形成一个新字符串。如果新字符串的长度大于
k
则重复第一步。
返回在完成所有轮操作后的 s
。
【示例】
【代码】
【代码】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"
}
}