目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
输入字符串s,输出s中包含所有整数的最小和。
说明:
字符串s,只包含 a-z A-Z ± ;合法的整数包括
- 正整数 一个或者多个0-9组成,如 0 2 3 002 102
- 负整数 负号 – 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023
二、输入描述
包含数字的字符串。
三、输出描述
所有整数的最小和。
输入 | 输出 | 说明 |
---|---|---|
bb1234aa | 10 | 1+2+3+3=10 |
b12-34aa | -31 | 1+2+(-34) = -31 |
四、解题思路
题读百遍,其义自见。
- 输入一个包含数字的字符串;
- 求出字符串中所有数字之和的最小值
比如:
b12-34aa
1+2+(-34) = -31就是最小值。
也就是说,如果是整数,直接相加,如果是负数,拼接成最小负数,再相加即可。
简单。
解题思路:
核心思想:如果是整数,直接相加,如果是负数,拼接成最小负数,再相加即可。
- 输入一行只包含字母、数字、符号-的字符串;
- 如果当前字符是-,表示负数的开始;
- 定义一个StringBuilder,用于拼接最小负数;
- 定义一个集合list,存储最小整数和最小负数;
- 如果是负数,为保证数字之和最小,需要拼接最小负数;
- 如果是数字,继续拼接负数;
- 如果不是数字,则表示最大负数拼接完毕,下次重新拼接;
- 如果是正数,为保证数字之和最小,直接拼接;
- 通过java8 Stream表达式(简洁/方便/上档次)快速求数字list之和;
- 输出所有整数的最小和。
五、Java算法源码
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);
}
}
六、效果展示
1、输入
b12-34aA1C79-3A
2、输出
-17
3、说明
获取最小整数和最小负数。
[1, 2, -34, 1, 7, 9, -3]
求其和为-17
🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。