public static String cartesianProduct(final String[][] inputs) {
if (inputs == null) {
return null;
}
final StringBuilder sb = new StringBuilder();
product("", 0, inputs, sb);
return sb.toString();
}
public void product(String prefix,int index, String[][] input,StringBuilder sb){
for (int i = 0; i < input[index].length; i++) {
if (index >= input.length - 1) {
sb.append(prefix + input[index][i]);
} else {
product(prefix + input[index][i], index + 1, input, sb);
}
if (i < input[index].length - 1) {
sb.append(", ");
}
}
}
两个变量关键prefix和index,作为递归方法的参数时进行变化prefix + input[index][i]
和index+1
。
从数列角度看,sb(j) = sb(j-1) + charAt(i) ,charAt(i)需要一个for循环即for (int i = 0; i < input[index].length; i++)
。sb(j-1)为prefix
,下一步需要prefix + input[index][i]
;其中j-1
为index
,进入下一步需要index+1
。
实现递归较容易的方式是先得到数列的通项公式。