java实现算法设计之走楼梯



public class Test {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
      GoStair gs = new GoStair(6);
      gs.backtrack(0);
}


}


class GoStair{
int  n;
int s[];
GoStair(int m){
n=m;
s=new int[n];
}
void backtrack(int t){
if(sum(t)>=n){//判断第t个节点前的总和是否大于等于楼梯总数
if(sum(t)==n){//相等
for(int i=0;i<t;i++)
//if(s[i]>0)
System.out.print(s[i]+" ");
}
System.out.println();
}else{
for(int i=1;i<=2;i++)
if(sum(t)+i<=n)//如果第t个节点前的总和+i小于等于楼梯总数,说明第t个节点可以等于i
{s[t]=i;
     // if(sum(t+1)<n)
backtrack(t+1);

}

}
}
//求第k个节点前所总的楼梯总数
private int sum(int k){
int temp=0;
for(int  i=0;i<k;i++)
temp+=s[i];
return temp;

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值