1, Problem description
1. Set n variables x1,x2 xn. By using these variables as the base and the powers of each layer in order, we can get the N-power as follows
2. In this paper, the above N-power is regarded as indeterminate, and it can become a definite N-power only after proper parentheses are added. Different bracketed ways lead to different n-powers. For example, when n=4, all four powers have five.
3. How many different powers of N are calculated for n variables.
4. Output n power in each case
2, Problem analysis and algorithm analysis
1. Using the idea of divide and conquer, the original problem is regarded as a sequence problem, the sequence order is invariable, adding proper brackets to the sequence to determine an n-power.
2. According to the idea of divide and conquer, the original problem is decomposed into atomic problem, that is, to find a power first.
3. Find the nth power i n the form of a[i] = "(" + a[j]+a[i-j] + ")". a[j] and a[i-j] are n cases in which the nth or I-j power exists in a set.
Traversing all cases of a[n] output N-power, a[n].size() is the number of cases of N-power.
Code
import java.util.ArrayList;
/**
* Describe multiple powers
* @author THTF
* @date 2018 July 9th 2013
*/
public class MultiplePower {
private static StrList[] l; //The subscript represents the nth power. str is all forms of ArrayList array used to store the nth power
public MultiplePower(int n) {
l = new StrList[n + 1]; //Initialization
for (int i = 0; i < n + 1; i++) {
l[i] = new StrList(); //Initialization
}
l[0].str.add(null); //Subscript 0 is not used
l[1].str.add("*"); //No parentheses when 1 power
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
for (String str2 : l[j].str) {
for (String str3 : l[i - j].str) {
l[i].str.add("(" + str2 + str3 + ")");
}
}
}
}
show(n);
}
/**
* Describe all n powers of output
* @param n
*/
public static void show(int n) {
for (String i : l[n].str) {
StringBuilder sb = new StringBuilder(i);
int counter = 0;
for (int k = 0; k < i.length(); k++) {
if (sb.charAt(k) == '*') {
sb.setCharAt(k, (char) ('A' + counter++));
}
}
System.out.println(sb);
System.out.println("common"+l[n].str.size()+"species");
}
}
}
/**
*
* @author THTF
* @date 2018 July 9th 2013
*/
class StrList {
public ArrayList<String> str;
public StrList() {
str = new ArrayList<String>(10000);
}
}