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

这篇博客介绍了力扣上的一道双变量问题,涉及如何在n*n的网格中通过选择行和列使得最终有k个黑色格子的涂色方案。博主分享了一种时间复杂度为O(n^2)的解决方案,并提出通过优化降低到O(n)的方法。示例展示了当n=2, k=2时的四种不同涂色方案。" 112457391,10330233,埃夫特ECR5协作机器人:安全、高效、易用、开放,"['协作机器人', '工业机器人', '埃夫特', '自动化', '制造业']
摘要由CSDN通过智能技术生成

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

小扣注意到秋日市集上有一个创作黑白方格画的摊位。摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动。画板上有 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值