- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
java解法
- 解题思路
- 本题的目标是从字符串数组 strs 中选出 3 个最小的元素,并按照最小的拼接方式组合成字符串。具体实现步骤如下:
按照数值大小排序
先将 strs 中的字符串转换为整数,并按数值大小排序(Integer::parseInt)。
取出 最小的 3 个元素。
按拼接结果排序
对这 3 个元素进行自定义排序:
比较 a + b 和 b + a,如果 a + b 小于 b + a,则 a 应该排在 b 前面。
例如,“30” 和 “3”,因为 “303” < “330”,所以 “30” 应该在前。
拼接字符串
通过 String.join(“”, sortedList) 将排序后的字符串列表合并,得到最终结果
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] strs = sc.nextLine().split(",");
System.out.println(findResult(strs));
}
public static String findResult(String[] strs) {
List<String> sortedList = Arrays.stream(strs)
.sorted(Comparator.comparingInt(Integer::parseInt))
.limit(3)
.sorted((a, b) -> (a + b).compareTo(b + a))
.collect(Collectors.toList());
return String.join("", sortedList);
}
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
C++解法
- 解题思路
- 本题的目标是从字符串数组 strs 中选出 3 个最小的元素,并按照最小的拼接方式组合成字符串。具体步骤如下:
按数值大小排序
将 strs 中的字符串转换为整数,并按数值大小排序(使用 stoi(a) < stoi(b) 进行比较)。
这样可以确保最小的 3 个数字被选中。
取出最小的 3 个元素,并按拼接规则排序
选取排序后的前 3 个元素(如果 strs 长度小于 3,则全部选取)。
按照拼接规则排序:
比较 a + b 和 b + a,如果 a + b 小于 b + a,则 a 应该排在 b 前面。
例如,“30” 和 “3”,因为 “303” < “330”,所以 “30” 应该在前。
拼接字符串
依次将排序后的字符串连接在一起,形成最终的最小组合
#include
#include
#include
#include
using namespace std;
string findResult(vector<string>& strs) {
sort(strs.begin(), strs.end(), [](const string& a, const string& b) {
return stoi(a) < stoi(b);
});
vector<string> sortedList(strs.begin(), strs.begin() + min(3, (int)strs.size()));
sort(sortedList.begin(), sortedList.end(), [](const string& a, const string& b) {
return (a + b) < (b + a);
});
string result;
for (const string& s : sortedList) {
result += s;
}
return result;
}
int main() {
string input;
getline(cin, input);
stringstream ss(input);
string token;
vector<string> strs;
while (getline(ss, token, ',')) {
strs.push_back(token);
}
cout << findResult(strs) << endl;
return 0;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
C解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
JS解法
过滤非数字字符串
通过 isNaN(parseInt(str)) 过滤掉无法转换为数字的字符串,确保输入是有效的数字字符串。
按数值大小排序
将 strs 转换为整数,并按照数值大小升序排序(parseInt(a) - parseInt(b))。
这样可以确保最小的 3 个数字被选中。
取出最小的 3 个元素,并按拼接规则排序
选取排序后的前 3 个元素(如果 strs 长度小于 3,则全部选取)。
按照拼接规则排序:
比较 a + b 和 b + a 的字典序,确保最小的拼接顺序。
例如,“30” 和 “3”,因为 “303” < “330”,所以 “30” 应该在前。
拼接字符串
依次将排序后的字符串连接在一起,形成最终的最小组合
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (line) => {
const strs = line.split(",");
console.log(findResult(strs));
});
function findResult(strs) {
strs = strs.filter(str => !isNaN(parseInt(str)))
.sort((a, b) => parseInt(a) - parseInt(b))
.slice(0, 3)
.sort((a, b) => (a + b).localeCompare(b + a));
return strs.join('');
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
评论记录:
回复评论: