#每日一题 力扣第22题 黑白格子画
今天同样是一道双变量的题目,通过行数和列树来控制总的黑色格子数。
小扣注意到秋日市集上有一个创作黑白方格画的摊位。摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动。画板上有 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题 黑白格子画相关推荐
- Leetcode-How-What 力扣Leetcode刷题指南
Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...
- 算法面试不懂这6大数据结构知识一定挂!(附力扣LeetCode真题讲解)
本文作者:苏勇,Google 资深技术工程师 首发地址:https://mp.weixin.qq.com/s/u8pvmupISQ5D4kGIkgfKbA 在互联网行业的算法面试中经常会被考到数据结构 ...
- 力扣数据结构刷题Day1-4
力扣数据结构刷题Day1-4 文章目录 力扣数据结构刷题Day1-4 前言 一.小试牛刀 存在重复元素(L217) 最大子数组和(L53) 动态规划法 贪心法 分治法 两数之和(L1) 合并两个有序数 ...
- 力扣(LeetCode)刷题,简单题(第22期)
目录 第1题:两数之和IV-输入BST 第2题:柠檬水找零 第3题:左叶子之和 第4题:第K个缺失的正整数 第5题:反转字符串2 第6题:最小移动次数使数组元素相等 第7题:分发饼干 第8题:二叉树的 ...
- 力扣(LeetCode)刷题,简单+中等题(第35期)
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升. 第1题:解码异或后的排列 试题要求如下: 回答(C语言): /*** Note: ...
- 力扣(LeetCode)刷题,简单+中等题(第34期)
目录 第1题:整数转罗马数字 第2题:电话号码的字母组合 第3题:二叉树的所有路径 第4题:砖墙 第5题:下一个排列 第6题:括号生成 第7题:删除并获得点数 第8题:全排列 第9题:颜色分类 第10 ...
- 力扣(LeetCode)刷题,简单+中等题(第33期)
目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...
- 力扣(LeetCode)刷题,简单+中等题(第32期)
目录 第1题:数组的度 第2题:托普利茨矩阵 第3题:爱生气的书店老板 第4题:翻转图像 第5题:有效的数独 第6题:无重复字符的最长子串 第7题:区域和检索 - 数组不可变 第8题:二维区域和检索 ...
- 力扣(LeetCode)刷题,简单+中等题(第31期)
目录 第1题:同构字符串 第2题:最后一块石头的重量 第3题:最小路径和 第4题:键盘行 第5题:存在重复元素 II 第6题:两数相加 第7题:三个数的最大乘积 第8题:等价多米诺骨牌对的数量 第9题 ...
最新文章
- QGIS Server使用记录
- iOS 问题整理04----Runtime
- proxy跨域不生效_vue前后端端口号不同,proxytable代理跨域无效
- 设计师必备的html工具
- 工作45:注意公用方法 别混入
- oracle强制drop用户,强制Oracle Drop全局临时表
- linux0.11中断描述符,Linux 0.11总结
- 大量的数据做字符串匹配_【重学数据结构与算法(JS)】字符串匹配算法(三)——BM算法...
- C++程序员Protocol Buffers基础指南
- JavaScript 小技巧之数组合并
- ios9提取安装包ipa_iOS 获取App的ipa包以及资源文件
- 设计在链式存储结构上交换二叉树中所有结点左右子树的算法
- iconfont 多色图标使用介绍
- 一个四维混沌吸引子曲线(matlab完整代码)
- 2022 人工智能 AI 应用 top6
- 实现js尾递归优化的代码
- 再看《西游记》——吴承恩眼中的现实社会是如何折射到《西游记》中的
- 国产数据库普及风暴有奖征文获奖名单揭晓
- Less -- 初见less(Less介绍 初次使用less 使用考拉编译less 盒子居中)
- 【AIoT库】“星”未来,展宏“图”—— 2022 AIoT星图品牌线上发布会圆满落幕