华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
输入字符串s,输出s中包含所有整数的最小和。
说明:
字符串s,只包含 a-z A-Z ± ;合法的整数包括
包含数字的字符串。
所有整数的最小和。
输入 | 输出 | 说明 |
---|---|---|
bb1234aa | 10 | 1+2+3+3=10 |
b12-34aa | -31 | 1+2+(-34) = -31 |
题读百遍,其义自见。
比如:
b12-34aa
1+2+(-34) = -31就是最小值。
也就是说,如果是整数,直接相加,如果是负数,拼接成最小负数,再相加即可。
简单。
解题思路:
核心思想:如果是整数,直接相加,如果是负数,拼接成最小负数,再相加即可。
package com.guor.od;
import java.util.*;
public class OdTest02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
// 拼接最小负数
StringBuilder negativeBuilder = new StringBuilder();
// 包含最小正整数、最小负数
List<String> list = new ArrayList<>();
// 是否是负数
boolean negativeFlag = false;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
// 负数标识符
if(c=='-'){
negativeFlag = true;
negativeBuilder.append("-");
continue;
}
// 如果是负数,为保证数字之和最小,需要拼接最小负数
if(negativeFlag){
// 如果是数字,继续拼接负数
if(Character.isDigit(c)) {
negativeBuilder.append(c);
}else{// 如果不是数字,则表示最大负数拼接完毕,下次重新拼接
list.add(negativeBuilder.toString());
negativeFlag = false;
negativeBuilder = new StringBuilder();
}
}else {// 如果是正数,为保证数字之和最小,直接拼接
if(Character.isDigit(c)){
list.add(String.valueOf(c));
}
}
}
System.out.println(list);
int sum = list.stream().mapToInt(Integer::parseInt).sum();
System.out.println(sum);
}
}
b12-34aA1C79-3A
-17
获取最小整数和最小负数。
[1, 2, -34, 1, 7, 9, -3]
求其和为-17
下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。