当前位置:   article > 正文

全排列 求子集 求Cmn

全排列 求子集 求Cmn

Cmn

  1. public class Main {
  2. static int M = 5;
  3. static int N= 3;
  4. static int[] a= new int[]{1,2,3,4,5};
  5. static int[] b = new int[N];
  6. public static void main(String[] args){
  7. C(M,N);
  8. }
  9. static void C(int m,int n){
  10. int i,j;
  11. for(i=n;i<=m;i++) {
  12. b[n-1] = i-1;
  13. if(n>1)
  14. C(i-1,n-1);
  15. else {
  16. for(j=0;j<=N-1;j++)
  17. System.out.print(a[b[j]] + " ");
  18. System.out.println();
  19. }
  20. }
  21. }
  22. }

Amn

  1. public class Main {
  2. static int M = 5;
  3. static int N = 3;
  4. static int[] a = new int[]{1, 2, 3, 4, 5};
  5. static int[] b = new int[N];
  6. public static void main(String[] args) {
  7. P(M, N);
  8. }
  9. static void P(int m, int n) {
  10. if (n == 0) {
  11. // 输出当前排列
  12. for (int i = 0; i < N; i++) {
  13. System.out.print(a[b[i]] + " ");
  14. }
  15. System.out.println();
  16. return;
  17. }
  18. // 从 m 中选出一个数放入排列中
  19. for (int i = 0; i < m; i++) {
  20. boolean used = false;
  21. for (int j = 0; j < N - n; j++) {
  22. if (b[j] == i) {
  23. used = true;
  24. break;
  25. }
  26. }
  27. if (!used) {
  28. b[N - n] = i;
  29. // 递归调用,选出下一个数
  30. P(m, n - 1);
  31. }
  32. }
  33. }
  34. }

求子集

  1. public void generateSubsets(String s, String subset, int index) {
  2. if (index == s.length()) {
  3. System.out.println(subset); // 输出当前子集
  4. return;
  5. }
  6. generateSubsets(s, subset + s.charAt(index), index + 1); // 包含当前字符
  7. generateSubsets(s, subset, index + 1); // 不包含当前字符
  8. }
  9. String str = "abc";
  10. generateSubsets(str, ""0); // 调用函数生成所有子集

全排列

  1. public class Main {
  2. public static void main(String[] args) {
  3. int[] arr = {1, 2, 3, 4};
  4. f(arr, 0);
  5. }
  6. public static void f(int[] arr, int k) {
  7. if (k == arr.length) {
  8. // 打印当前排列
  9. for (int num : arr) {
  10. System.out.print(num + " ");
  11. }
  12. System.out.println();
  13. } else {
  14. for (int i = k; i < arr.length; i++) {
  15. // 交换位置
  16. int temp = arr[i];
  17. arr[i] = arr[k];
  18. arr[k] = temp;
  19. // 递归调用
  20. f(arr, k + 1);
  21. // 恢复交换前的状态,以便下一次迭代
  22. temp = arr[i];
  23. arr[i] = arr[k];
  24. arr[k] = temp;
  25. }
  26. }
  27. }
  28. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/415590
推荐阅读
相关标签
  

闽ICP备14008679号