[英]Replace each “#” with an “X” or an “O” iteratively
I've been asked to generate all possible combinations of a row where the hidden #
squares can be either X
or O
.我被要求生成所有可能的行组合,其中隐藏的
#
方块可以是X
或O
。 I did it recursively but now I have to do an iterative version.我递归地做了,但现在我必须做一个迭代版本。
I tried replacing UnHide(strChar, i+1)
with strChar = strChar.substring(0, i+1)
, but that doesn't work.我尝试用
strChar = strChar.substring(0, i+1)
替换UnHide(strChar, i+1)
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);
}
I am not sure where your code goes wrong, but you can try the following:我不确定您的代码哪里出错了,但是您可以尝试以下方法:
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;
}
Then calling:然后调用:
String str = "XOXX#OO#XO";
System.out.println(UnHide(str));
outputs:输出:
[XOXXOOOXXO, XOXXXOOOXO, XOXXOOOOXO, XOXXXOOXXO]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.