一个从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;
}
}