题解 | #丢棋子问题#
丢棋子问题
http://www.nowcoder.com/practice/d1418aaa147a4cb394c3c3efc4302266
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回最差情况下扔棋子的最小次数
* @param n int整型 楼层数
* @param k int整型 棋子数
* @return int整型
*/
public int solve (int n, int k) {
// write code here
int t = 1 ;
while(calF(k,t )< n+1){
t ++;
}
return t;
}
//k 棋子数
//t 楼层
private int calF(int k , int t){
//棋子数 或楼层数 是 1 则我们最多能测试出来,最高楼层是2层,就是如果1层棋子没碎,那么我们可以最多确认最高能到2层,2层也可能会碎
if(t == 1 || k == 1){
return t +1;
}
//否则递归 棋子 -1 机会减少1次 ,棋子碎了, 和 棋子 没碎,楼层数少测一层
return calF(k - 1, t -1) + calF(k, t-1);
}
}