LCP 22. 黑白方格画
现在还只能想到这种简单粗暴的方法...就是遍历涂的行数和列数,因为不论该行该列在哪里,所得的黑块数都一样。得出符合要求的黑块数再用组合公式计算组合数。
public class Solution {
public int PaintingPlan(int n, int k) {
// 符合要求的方案数
int res = 0;
if(n * n == k || n * n == 0)
{
return 1;
}
for(int i = -1; i < n; i++)
{
for(int j = -1; j < n; j++)
{
// 计算当前黑块数
int blackNum = n * (i + 1) + (n - i - 1) * (j + 1);
// 组合数公式
if(blackNum == k)
{
res = res + (Factorial(n) * Factorial(n)) / (Factorial(n - i - 1) * Factorial(n - j - 1) * Factorial(i + 1) * Factorial(j + 1));
}
}
}
return res;
}
public int Factorial(int n){
int res = 1;
if (n == 0)
{
return res;
}
for (int i = 1; i <= n; i++)
{
res = res * i;
}
return res;
}
}