请问走n步回到0有几种不同的走法

一个从0-9的封闭环,即是0-1-2-3-4-5-6-7-8-9-0, 可以正向走,也可以逆向走; 请问走n步回到0有几种不同的走法(譬如n为2, 0-1-0, 0-9-0共有两种走法)?

public class Circle {

/**
 * 单数不可能回到原点, 因为圆圈点为10 , 10是2 的倍数。
 * 转换成求排列组合问题, 比如N == 6, 则必然有3步向前,3步后退, 无关顺序,所以只要选3个位置存放向前即可,组合共有6*5*4 / 3/2 =  20种方案
 * 当N > 10 时,需要进行迭代, 因为过10则可以有全向前的步数。 当N == 10 时,多出两个走法。
 * @param args
 */


public static void main(String[] args){
    System.out.println("hello");
    //System.out.print(calcu(6, 2));
    System.out.println(findNumber(11));
    System.out.println(findNumber(12));
    System.out.println(findNumber(22));
}


static Integer findNumber(Integer N){

    if (N == 0 || N %2 == 1){
        return 0;
    }
    Integer Number = travel(N - 10, N);
    return Number;
}

static Integer travel(Integer needInsert, Integer N){
    if (needInsert <0){
        return calcu(N, N/2);
    }else if (needInsert == 0){
        return calcu(N, N/2) + 2;
    }else if (needInsert % 10 == 0){
        return 2 * calcu(N, needInsert/2) + travel(needInsert -10, N) + 2;
    }else {
        return 2 * calcu(N, needInsert/2) + travel(needInsert -10, N);
    }
}

static Integer calcu(Integer n, int i) {
    int number = 1;
    int temp = 1;
    while(i >0){
        number = number * (n-i +1);
        temp = temp * i;
        i--;
    }
    return number / temp;
}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值