mport java.util.ArrayList;import java.util.Scanner;public class MultiplePower { private static StrList[] l; //下标表示第n重幂, .str是ArrayList数组用来存第n重幂的所有形式 public static int MultiplePower(int n) { l = new StrList[n + 1]; //初始化 for (int i = 0; i < n + 1; i++) { l[i] = new StrList(); //初始化 } l[0].str.add(null); //0号下标不用 l[1].str.add(""); //1重幂的时候不加括号 for (int i = 2; i <= n; i++) { int count = 0; for (int j = 1; j < i; j++) { count += l[j].str.size() * l[i - j].str.size(); } 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 + ")"); } } } l[i].count = count; } show(n); return l[n].count; } //描述 输出所有n重幂 public static void show(int n) { for (String i : l[n].str) { StringBuilder sb = new StringBuilder(i); int counter = 1; for (int k = 1; k <= i.length()+n-3; k++) { if (sb.charAt(k) == '') { sb.replace(k, k+1, "x" + (counter++)); } } System.out.println(sb); } } public static void main(String[] args) { System.out.println("请输入n重幂"); Scanner scanner=new Scanner(System.in); //n重幂 int x=scanner.nextInt(); System.out.println("所得的结果:"); System.out.println(MultiplePower(x)); }}class StrList { public ArrayList<String> str; public int count; public StrList() { str = new ArrayList<String>(10000); count = 0; }修改算法时间复杂度为O(n^2))空间复杂度为o(n)
时间: 2024-04-29 20:19:24 浏览: 169
Eclipse中引入com.sun.image.codec.jpeg包报错的完美解决办法
修改后的算法时间复杂度为 O(n^2),空间复杂度为 O(n)。
时间复杂度分析:
该算法的时间复杂度主要由两个嵌套的 for 循环决定,外层循环执行 n-1 次,内层循环执行的次数是 i-1,因此内部循环的总次数是 1+2+...+(n-1) = n*(n-1)/2,即 O(n^2)。内部循环中又执行了一个双重的 for 循环,每次循环的次数是 l[j].str.size() * l[i - j].str.size(),因此总次数是 1+2+...+(n-1) = n*(n-1)/2,即 O(n^2)。因此,算法的总时间复杂度为 O(n^2)。
空间复杂度分析:
该算法的空间复杂度主要由一个数组 l 组成,其大小为 n+1,因此它的空间复杂度为 O(n)。因此,算法的总空间复杂度为 O(n)。
阅读全文