如何解决用“X”或“O”迭代替换每个“#”
我被要求生成一行的所有可能组合,其中隐藏的 #
方块可以是 X
或 O
。我是递归完成的,但现在我必须做一个迭代版本。
我尝试用 UnHide(strChar,i+1)
替换 strChar = strChar.substring(0,i+1)
,但这不起作用。
public static void main(String[] args) {
String str = new String("XOXX#OO#XO");
UnHide(str,0);
}
public static void UnHide(String str,int i) {
char[] chararr = str.tochararray();
String strChar = new String(chararr);
if (i == chararr.length) {
System.out.println(chararr);
return;
}
//Replace masked "#" at each specified index by O or X
if (chararr[i] == '#') {
for (int j = 0; j < 2; j++) {
//Replace masked "#" by O
if (j == 0) {
chararr[i] = 'O';
strChar = String.copyValueOf(chararr);
UnHide(strChar,i + 1); //Call UnHide with an incremented index
strChar = strChar.substring(0,i + 1);
chararr[i] = '#';
}
//Replace masked "#" by X
else {
chararr[i] = 'X';
strChar = String.copyValueOf(chararr);
UnHide(strChar,i + 1);
chararr[i] = '#';
}
}
return;
}
UnHide(strChar,i + 1);
}
解决方法
我不确定您的代码哪里出错了,但您可以尝试以下操作:
private static final char toReplace = '#';
private static final Set<Character> replacements = new HashSet<>(Arrays.asList('X','O'));
private static Set<String> UnHide(String s) {
Set<String> result = new HashSet<>();
result.add("");
for (char c : s.toCharArray()){
Set<String> updatedResult = new HashSet<>();
for (String temp : result) {
if (toReplace == c) {
for (Character replacement : replacements) {
updatedResult.add(temp + replacement);
}
} else {
updatedResult.add(temp + c);
}
}
result = updatedResult;
}
return result;
}
然后调用:
String str = "XOXX#OO#XO";
System.out.println(UnHide(str));
输出:
[XOXXOOOXXO,XOXXXOOOXO,XOXXOOOOXO,XOXXXOOXXO]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。