求助一道java算法题 java 算法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 pailie(3) pailie(aaa)aaa=i;aaa=j;aaa=k; 这是递归的一个实现,也可以循环遍历数组a实现楼主慢慢看吧 public static void pailie(int length) { int a[] = new int [length];//记录当前应该输出的值 pp(length,a); } public static void pp(int length,int a[]) { if(length>0){ for (int i = 0; i < 2; i++) { a[length-1]=i; pp(length-1,a); } }else{ //pp(0)的时候输出所有值 System.out.print(a[a.length-1]); for(int i = a.length-2; i >=0; i--){ System.out.print( " / " + a[i] ); } System.out.println(); } } 最简单的思路就是,楼主可以用Scanner接收控制台的一个整形参数,然后三个for循环 幂集问题么?老掉牙了。解决“排列组合问题”一类问题,其釜底抽薪的办法就是弄懂解空间树:import java.util.Scanner;public class Pailie { public static void pailie(int length){ combineAllDfs(0, new int[length]); } public static void printOne(int[] array){ System.out.print(array[0]); for(int i=1;i<array.length;i++){ System.out.print(" / "+array[i]); } System.out.println(); } public static void combineAllDfs(int level,int[] array){ if(level==array.length-1){ printOne(array); array[level]=1; printOne(array); array[level]=0; }else{ //递归左子树 combineAllDfs(level+1, array); array[level]=1; //递归右子树 combineAllDfs(level+1, array); //回溯 array[level]=0; } } public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); pailie(n); }}另外,还有:全排列(包括字典序)、C(M,N)(可打表)、A(M,N)三个问题,希望lz练习一下,弄懂之后,排列组合算是入门了。 大虾,请问 C(M,N)(可打表)、A(M,N) 是什么意思啊 C(M,N):例如:C(3,2)应该输出,0/1/1 1/0/1 1/1/0“动态规划”俗称“打表”,用于减少递归算法的重复计算。有了全排列、C(M,N)之后,A(M,N)就可以求出了,因为A(M,N)=C(M,N)*A(N,N) Java正则表达式的一个问题 java swing 如何使用BoxLayout Y_AXIS 请高手救急!!! 有关ConvolveOp及Kernel的实现,愿以5本图书相赠。 从来没见过却可以运行的for语句 怪 Java中的方法 为什么无法排序哪? 100分,求如何设计这个报表,请各位大虾帮忙! cannot find symbol 是什么意思啊? 求JB的项目 如何用source safe来管理java团队开发 关于synchronized的理解,希望高手给出答案 freemarker获取模板
aaa=j;
aaa=k;
楼主慢慢看吧
public static void pailie(int length) {
int a[] = new int [length];//记录当前应该输出的值
pp(length,a);
}
public static void pp(int length,int a[]) {
if(length>0){
for (int i = 0; i < 2; i++) {
a[length-1]=i;
pp(length-1,a);
}
}else{
//pp(0)的时候输出所有值
System.out.print(a[a.length-1]);
for(int i = a.length-2; i >=0; i--){
System.out.print( " / " + a[i] );
}
System.out.println();
}
}
import java.util.Scanner;public class Pailie {
public static void pailie(int length){
combineAllDfs(0, new int[length]);
}
public static void printOne(int[] array){
System.out.print(array[0]);
for(int i=1;i<array.length;i++){
System.out.print(" / "+array[i]);
}
System.out.println();
}
public static void combineAllDfs(int level,int[] array){
if(level==array.length-1){
printOne(array);
array[level]=1;
printOne(array);
array[level]=0;
}else{
//递归左子树
combineAllDfs(level+1, array);
array[level]=1;
//递归右子树
combineAllDfs(level+1, array);
//回溯
array[level]=0;
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
pailie(n);
}
}另外,还有:全排列(包括字典序)、C(M,N)(可打表)、A(M,N)三个问题,希望lz练习一下,弄懂之后,排列组合算是入门了。
例如:C(3,2)应该输出,0/1/1 1/0/1 1/1/0
“动态规划”俗称“打表”,用于减少递归算法的重复计算。
有了全排列、C(M,N)之后,A(M,N)就可以求出了,因为A(M,N)=C(M,N)*A(N,N)