华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
每个数字关联多个字母,关联关系如下:
第一行输入为一串数字字符串,数字字符串中的数字不允许重复,数字字符串的长度大于0,小于等于5;
第二行输入是屏蔽字符串,屏蔽字符串的长度一定小于数字字符串的长度,屏蔽字符串中字符不会重复;
输出可能的字符串组合
注:字符串之间使用逗号隔开,最后一个字符串后携带逗号
package com.guor.od;
import java.util.*;
public class OdTest {
static Map<Integer, List<Character>> map = new HashMap<Integer, List<Character>>();
static String[] numArr = null;
static List<String> okList = new ArrayList<>();
public static void main(String[] args) {
// 每个数字关联多个字母,关联关系如下
String[] arr = {"abc", "def", "ghi", "jkl", "mno", "pqr", "st", "uv", "wx", "yz"};
Scanner sc = new Scanner(System.in);
String input1 = sc.nextLine();
String input2 = sc.nextLine();
List<Integer> numberList = new ArrayList<>();
for (int i = 0; i < input1.length(); i++) {
numberList.add(Integer.parseInt(input1.charAt(i) + ""));
}
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (numberList.contains(i)) {
// 第一行字母关联的数字
List<Character> list = new ArrayList<Character>();
for (int j = 0; j < arr[i].length(); j++) {
list.add(arr[i].charAt(j));
}
map.put(count++, list);
}
}
numArr = new String[map.size()];
dfs(0);
for (String s : okList) {
if (s.indexOf(input2) == -1) {
System.out.print(s + ",");
}
}
}
static StringBuilder builder = new StringBuilder();
public static void dfs(int num) {
if (num == map.size()) {
for (int i = 0; i < numArr.length; i++) {
builder.append(numArr[i]);
}
okList.add(builder.toString());
builder.setLength(0);
return;
}
for (int i = 0; i < map.get(num).size(); i++) {
numArr[num] = map.get(num).get(i) + "";
dfs(num + 1);
}
}
}
89
wy
wz,xy,xz,
89对应"wx", “yz”。
屏蔽wy。
“wx”, "yz"四种有效组合,屏蔽wy,变为wz,xy,xz,
下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。