黑白方格画

题目:小扣注意到秋日市集上有一个创作黑白方格画的摊位。摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动。画板上有 n * n 的网格。绘画规则为,小扣可以选择任意多行以及任意多列的格子涂成黑色,所选行数、列数均可为 0。

小扣希望最终的成品上需要有 k 个黑色格子,请返回小扣共有多少种涂色方案。

注意:两个方案中任意一个相同位置的格子颜色不同,就视为不同的方案。

示例 1:

输入:n = 2, k = 2输出:4解释:一共有四种不同的方案:
第一种方案:涂第一列;
第二种方案:涂第二列;
第三种方案:涂第一行;
第四种方案:涂第二行。

示例 2:

输入:n = 2, k = 1输出:0解释:不可行,因为第一次涂色至少会涂两个黑格。

示例 3:

输入:n = 2, k = 4输出:1解释:共有 2*2=4 个格子,仅有一种涂色方案。

限制:

1 <= n <= 6
0 <= k <= n * n

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ccw6C7
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的解题思路:(排列组合)
1、考虑小扣希望的格子数 k(是画板满格n * n)那就只有一种情况
2、因为小扣可以涂0个也算一种画法,所以不能通过k<n 就直接判定是0种画法,比如n=4,k=0,算一种画法,但是可以通过0<k && k<n 判定,虽然这种情况下for循环已经包含了,但是也可以再加一下减少for循环的使用
3、设置两个for循环,外层是行,内层是列
比如:确定了n=4,k=10时有 一行两列的画法 按照排列组合的思路: {(行是C 4取1)*(列是C 4取2) 有24种方法} 和 两行一列的画法 (同理24种方法),加起来48才算总的画法。
4、排列组合的算法写成另一方法再调用,具体过程代码注释有解释

class Solution {public int paintingPlan(int n, int k) {int ans = 0;if(k==n*n) return 1;if(0<k && k<n) return 0;//不要这个也可以,for循环已经包含该情况//题目中说列数、行数可为0,所以a,b从0开始for(int a=0; a<=n; a++) {//要画行数 a 不能大于 总行数 nfor(int b=0; b<=n; b++) {//要画列数 b 不能大于 总列数 nint sum = a*n + b*n - a*b;//画的总格子数,先算各行各列的再减掉重复的if(sum==k) {//满足任意行、列数格子数总和就进来int x = combination(n, a);//行有多少种画法int y = combination(n, b);//列有多少种画法//比如确定 n=4,k=10时有 一行两列的画法(24种方法)和 两行一列的画法 (24种方法),加起来48才算总的画法ans += x*y;System.out.println(ans);}}}return ans;}//排列组合算法 C n 取 mint combination(int n, int m) {//比如 (C6取2)等价于(C6取4) 即6*5/(1*2)= 6*5*4*3/(1*2*3*4)//第二种  6*5*4*3/(1*2*3*4)的写法int ans = 1;for(int i=n; i>m; i--) ans *= i; //ans=n*(n-1)*...*(m+1)=3*4*5*6for(int i=n-m; i>0; i--) ans /= i;//ans=上面结果 除以 (1*2*...*(n-m))=1*2*3*4return ans;/*第一种  6*5/(1*2)的写法int num1=1,num2=1,num3=1;for (int i = n; i >0 ; i--) num1*=i;//1*2*3*4*5*6for (int i = m; i >0 ; i--) num2*=i;//1*2for (int i = n-m; i >0 ; i--) num3*=i;//1*2*3*4return num1/(num2*num3);//就是5*6/(1*2)*/}}

LCP 22. 黑白方格画(排列组合)相关推荐

  1. LCP 22.黑白方格画

    文章目录 题目简述 题解示例 数据范围 标记难度 问题解析 python3代码 C语言代码 C++代码(Copy) 大佬专属代码 凉梦空间 题目简述 小扣注意到秋日市集上有一个创作黑白方格画的摊位.摊 ...

  2. LeetCode LCP 22. 黑白方格画

    文章目录 1. 题目 2. 解题 1. 题目 小扣注意到秋日市集上有一个创作黑白方格画的摊位. 摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动. 画板上有 n * n 的网格.绘画规则为,小 ...

  3. 黑白方格画C++解答

    LCP 22. 黑白方格画C++解答 使用C++进行解答,虽然是简单难度的题,但自己做的时候也忽略了一些可能性,特此记录一下 当然在代码规范和代码效率上和题解上的大佬们比不了 下面是 代码. clas ...

  4. leetcode黑白方格画

    leetcode黑白方格画 题目截图: 题目限制: 示例 1: 输入:n = 2, k = 2 输出:4 解释:一共有四种不同的方案: 第一种方案:涂第一列: 第二种方案:涂第二列: 第三种方案:涂第 ...

  5. LeetCode.黑白方格画

    题目: 小扣注意到秋日市集上有一个创作黑白方格画的摊位.摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动.画板上有 n * n 的网格.绘画规则为,小扣可以选择任意多行以及任意多列的格子涂成黑 ...

  6. leetcode 1. 黑白方格画

    小扣注意到秋日市集上有一个创作黑白方格画的摊位.摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动.画板上有 n * n 的网格.绘画规则为,小扣可以选择任意多行以及任意多列的格子涂成黑色,所选 ...

  7. AcWing-822. 走方格(排列组合)

    文章目录 一.原题题目 二.解题思路 三.代码实现 四.题目总结 一.原题题目 题目跳转链接在这里:https://www.acwing.com/problem/content/824/ 二.解题思路 ...

  8. #每日一题 力扣第22题 黑白格子画

    今天同样是一道双变量的题目,通过行数和列树来控制总的黑色格子数. 小扣注意到秋日市集上有一个创作黑白方格画的摊位.摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动.画板上有 n * n 的网格 ...

  9. 走方格跳格子(dp,递归,排列组合三种方法)

    走方格: 给定一个 n×mn×m 的方格阵,沿着方格的边线走,从左上角 (0,0)(0,0) 开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m)(n,m) 一共有多少种不同的走法. 输 ...

最新文章

  1. 我们的解决方案:日志系统
  2. ASP.NET MVC3 上传头像图片并截图
  3. C语言“悬空指针”和“野指针”究竟是什么意思?
  4. 62 getproperty对象
  5. 使用apache FileUtils下载文件
  6. Linux内核参数传递Tag
  7. linux qt ping,Qt5.2中使用ping命令实现Ip扫描功能
  8. 国内一些大公司的开源项目
  9. server2012 asp odb数据原_异地服务器文件及数据库定时备份
  10. SparkStreaming项目(实时统计每个品类被点击的次数)
  11. js math保留两位小数
  12. C++中数组定义及初始化
  13. Bailian3250 字母重排【排序】
  14. Leetcode 286.墙与门
  15. 【正点原子MP157连载】第二十五章 I2C光照接近传感器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南
  16. 《细说PHP》分页源代码
  17. Oracle VM VirtualBox 使用教程,说实话也就那样吧
  18. ASTC图片纹理压缩探讨
  19. Vue动态渲染本地图片
  20. 一文理解完美二叉树, 完全二叉树和完满二叉树

热门文章

  1. Switch模拟器调研
  2. c c++ 画点 画线
  3. js 获取所有被选中复选框的值
  4. 百度定位成功但经纬度返回4.9E-324
  5. 如何获取微信好友的地理位置信息
  6. LTE 系统信息SI
  7. el-table 大数据量渲染,页面卡顿的解决方案
  8. 寒武纪笔试——嵌入式
  9. Android音频混响特效的设置
  10. HTML——3D移动、3D透视、3D效果、3D呈现案例效果