要計(jì)算這個(gè)組合數(shù)之和,可以使用Java中的組合數(shù)公式,即C(n, m) = n! / (m! * (n-m)!)。首先我們可以使用循環(huán)和遞歸的方式來計(jì)算組合數(shù):
成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會來證明自己,這并不會花費(fèi)您太多時(shí)間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。
public class Main {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i = 4; i++) {
sum += combination(7, i);
}
sum += combination(7, 7);
System.out.println(sum);
}
public static int combination(int n, int m) {
if (m == 0 || m == n) {
return 1;
}
return combination(n-1, m-1) + combination(n-1, m);
}
}
在這個(gè)代碼中,我們使用了循環(huán)遍歷C7^1到C7^4這四個(gè)組合數(shù),并且計(jì)算它們的和。然后,我們再計(jì)算C7^7,并把它的結(jié)果加入到總和中。
在計(jì)算組合數(shù)時(shí),我們使用了遞歸的方式實(shí)現(xiàn)組合數(shù)公式。具體來說,當(dāng)m為0或n時(shí),組合數(shù)為1。否則,我們使用遞歸調(diào)用來計(jì)算C(n-1, m-1)和C(n-1, m),然后將它們相加得到結(jié)果。
上述代碼的輸出結(jié)果為:924。
代碼如下:
import java.util.ArrayList;
import java.util.List;
class Org {
private String id;
private String name;
private String pid;
public Org(String id, String name, String pid) {
this.id = id;
this.name = name;
this.pid = pid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
@Override
public String toString() {
return "Org [id=" + id + ", name=" + name + ", pid=" + pid + "]";
}
}
public class App {
static void find(ListOrg list, String pid) {
list.stream().filter(p - p.getPid().equals(pid))
.forEach(org - {
System.out.println(org);
find(list, org.getId());
});
}
public static void main(String[] args) {
ListOrg list = new ArrayList();
list.add(new Org("111", "公司", "0"));
list.add(new Org("222", "部門", "111"));
list.add(new Org("333", "小組", "222"));
list.add(new Org("444", "員工1", "333"));
list.add(new Org("555", "員工2", "333"));
find(list, "0");
System.out.println("------------------------------------");
find(list, "111");
}
}
運(yùn)行結(jié)果:
這樣的用簡單的判斷就行了 :先判斷PID為空的,這個(gè)是父節(jié)點(diǎn),然后取出PID為空的Id當(dāng)做取其子節(jié)點(diǎn)的父節(jié)點(diǎn),一次判斷就行了,結(jié)合列子:取PID為空的ID即1,2,然后把取PId等于1和2的ID即345和6然后分別掛在1和2下,345就是1的子節(jié)點(diǎn),6是2的子節(jié)點(diǎn),有多節(jié)點(diǎn)的一次類推(這只是其中一個(gè)簡單的方法)
代碼:
package com.ufotable.test;
public class Test30 {
private static int l,r,u,d;//定義上下左右邊界
private static int[][] a=new int[0][0];//數(shù)組
private static int y=0,x=0;//初始化坐標(biāo)
private static int step,temp;//步長,上一個(gè)數(shù)組的值
private static void add(int y,int x){
temp+=step;a[y][x]=temp;
}
private static void left(){
while(xl)add(y, --x);//未遇到左邊界
if(yu){//遇到左邊界且未遇到上邊界
l++;up();
}
}
private static void right(){
while(xr)add(y, ++x);//未遇到右邊界
if(yd){//遇到右邊界且未遇到下邊界
r--;
down();
}
}
private static void up(){
while(yu)add(--y, x);//未遇到上邊界
if(xr){//遇到上邊界且未遇到右邊界
u++;
right();
}
}
private static void down(){
while(yd)add(++y, x);//未遇到下邊界
if(xl){//遇到下邊界且未遇到左邊界
d--;
left();
}
}
private static void fun(int start,int step,int length){//產(chǎn)生數(shù)組(起始值,步長,矩陣邊長)
Test30.step=step;
l=u=0;r=d=length-1;
a=new int[length][length];
a[0][0]=temp=start;
up();
}
public static void print(){//輸出矩陣
for(int i=0;ia.length;i++){
for(int j=0;ja.length;j++){
System.out.print(a[i][j]+"\t");
}System.out.println();}
}
public static void main(String[] args) {
fun(0,1,10);//測試
print();
}
}
輸出結(jié)果: