今天同样是一道双变量的题目,通过行数和列树来控制总的黑色格子数。

小扣注意到秋日市集上有一个创作黑白方格画的摊位。摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动。画板上有 n * n 的网格。绘画规则为,小扣可以选择任意多行以及任意多列的格子涂成黑色(选择的整行、整列均需涂成黑色),所选行数、列数均可为 0。
小扣希望最终的成品上需要有 k 个黑色格子,请返回小扣共有多少种涂色方案。
注意:两个方案中任意一个相同位置的格子颜色不同,就视为不同的方案。
示例 1:
输入:n = 2, k = 2
输出:4
解释:一共有四种不同的方案:
第一种方案:涂第一列;
第二种方案:涂第二列;
第三种方案:涂第一行;
第四种方案:涂第二行。

因为是两个变量,我们采用“定一变一”的方法来设置遍历,先定行数p,行数p可以涂上n*p个有效黑色块,列数q可以涂上(n-p)*q个有效黑色块。然后确定了p和q之后,计算组合数C(n,p)*C(n,q)

class Solution {public://计算组合数C(n,x)int fun(int x,int n){int a=1,b=1;for(int i=n;i>(n-x);i--)a*=i;for(int i=1;i<=x;i++)b*=i;return a/b;}int paintingPlan(int n, int k) {//根据题目,当整个画布都被涂满时,只有一种方案if(k==n*n)return 1;int temp=0;//先定行数for(int p=0;p<=n;p++){if(p*n>k)break;//再定列数for(int q=0;q<=n;q++){if(p*n+q*(n-p)==k){//将此方案数记录下来temp+=(fun(p,n)*fun(q,n));break;}}}  return temp;         }
};

此方案的时间复杂度为O(n^2),那能不能想办法降低时间复杂度呢,我们发现根据p可以直接定出q,q=(k-p*n)/(n-p),这样就可以降为O(n)。
代码如下:

class Solution {public:int fun(int x,int n){int a=1,b=1;for(int i=n;i>(n-x);i--)a*=i;for(int i=1;i<=x;i++)b*=i;return a/b;}int paintingPlan(int n, int k) {if(k==n*n)return 1;int temp=0;for(int p=0,q=0;p<=n;p++){if(p*n>k)break;//直接根据行数p计算出对应的列数qif((k-p*n)%(n-p)==0){q=(k-p*n)/(n-p);if(q<=n)temp+=(fun(p,n)*fun(q,n));}}  return temp;         }
};

#每日一题 力扣第22题 黑白格子画相关推荐

  1. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  2. 算法面试不懂这6大数据结构知识一定挂!(附力扣LeetCode真题讲解)

    本文作者:苏勇,Google 资深技术工程师 首发地址:https://mp.weixin.qq.com/s/u8pvmupISQ5D4kGIkgfKbA 在互联网行业的算法面试中经常会被考到数据结构 ...

  3. 力扣数据结构刷题Day1-4

    力扣数据结构刷题Day1-4 文章目录 力扣数据结构刷题Day1-4 前言 一.小试牛刀 存在重复元素(L217) 最大子数组和(L53) 动态规划法 贪心法 分治法 两数之和(L1) 合并两个有序数 ...

  4. 力扣(LeetCode)刷题,简单题(第22期)

    目录 第1题:两数之和IV-输入BST 第2题:柠檬水找零 第3题:左叶子之和 第4题:第K个缺失的正整数 第5题:反转字符串2 第6题:最小移动次数使数组元素相等 第7题:分发饼干 第8题:二叉树的 ...

  5. 力扣(LeetCode)刷题,简单+中等题(第35期)

    力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升. 第1题:解码异或后的排列 试题要求如下: 回答(C语言): /*** Note: ...

  6. 力扣(LeetCode)刷题,简单+中等题(第34期)

    目录 第1题:整数转罗马数字 第2题:电话号码的字母组合 第3题:二叉树的所有路径 第4题:砖墙 第5题:下一个排列 第6题:括号生成 第7题:删除并获得点数 第8题:全排列 第9题:颜色分类 第10 ...

  7. 力扣(LeetCode)刷题,简单+中等题(第33期)

    目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...

  8. 力扣(LeetCode)刷题,简单+中等题(第32期)

    目录 第1题:数组的度 第2题:托普利茨矩阵 第3题:爱生气的书店老板 第4题:翻转图像 第5题:有效的数独 第6题:无重复字符的最长子串 第7题:区域和检索 - 数组不可变 第8题:二维区域和检索 ...

  9. 力扣(LeetCode)刷题,简单+中等题(第31期)

    目录 第1题:同构字符串 第2题:最后一块石头的重量 第3题:最小路径和 第4题:键盘行 第5题:存在重复元素 II 第6题:两数相加 第7题:三个数的最大乘积 第8题:等价多米诺骨牌对的数量 第9题 ...

最新文章

  1. QGIS Server使用记录
  2. iOS 问题整理04----Runtime
  3. proxy跨域不生效_vue前后端端口号不同,proxytable代理跨域无效
  4. 设计师必备的html工具
  5. 工作45:注意公用方法 别混入
  6. oracle强制drop用户,强制Oracle Drop全局临时表
  7. linux0.11中断描述符,Linux 0.11总结
  8. 大量的数据做字符串匹配_【重学数据结构与算法(JS)】字符串匹配算法(三)——BM算法...
  9. C++程序员Protocol Buffers基础指南
  10. JavaScript 小技巧之数组合并
  11. ios9提取安装包ipa_iOS 获取App的ipa包以及资源文件
  12. 设计在链式存储结构上交换二叉树中所有结点左右子树的算法
  13. iconfont 多色图标使用介绍
  14. 一个四维混沌吸引子曲线(matlab完整代码)
  15. 2022 人工智能 AI 应用 top6
  16. 实现js尾递归优化的代码
  17. 再看《西游记》——吴承恩眼中的现实社会是如何折射到《西游记》中的
  18. 国产数据库普及风暴有奖征文获奖名单揭晓
  19. Less -- 初见less(Less介绍 初次使用less 使用考拉编译less 盒子居中)
  20. 【AIoT库】“星”未来,展宏“图”—— 2022 AIoT星图品牌线上发布会圆满落幕

热门文章

  1. 餐厅预订系统如何选?餐厅预订系统推荐
  2. 第二章 GD MCU程序下载
  3. python多线程多个cpu_为什么python的多线程不能利用多核CPU?
  4. 创业融资路演PPT模板
  5. 仿照微信写的uni-app项目
  6. [原创] PowerPC 汇编入门与优化
  7. WIN10 mscomm32注册,亲测可用
  8. FootStep 6、诺基亚、摩托罗拉、索尼爱立信和三星手机系列命名介绍『整理、了解』
  9. 2022上海省赛(A,E,G,H,M,N)
  10. 大数据面前,统计学的价值在哪里