使用数学方法,进行分类讨论,得到最终结果。

先贴代码:

public class Solution1 {public static int paintingPlan(int n, int k) {int result = 0;//三种情况此种情况为1if(k==0||(k==1&&n==1)||n*n==k){result = 1;}else{int x = 0;//横排数量int temp = k;//黑色格子总值临时值if(k>=n){while(temp>0){x++;temp = temp - n;if(temp<=0){break;}else if(temp%(n-x)==0){//取余满足条件result += cFunction(n, temp/(n-x))*cFunction(n, x);}}//横排即可满足条件if(k%n==0){result += cFunction(n, k/n)*2;}}}return result;}//排列组合C的计算方式public static int cFunction(int n, int m){//代表C(n,m)return jc(n)/jc(m)/jc(n-m);}//阶乘方法public static int jc(int a){int result = 1;for(int i=a;i>0;i--){result *= i;}return result;}public static void main(String[] args) {int result = paintingPlan(3,8);System.out.println(result);}
}

解题思路:

在此以10×10为例,如图所示

x   x   x   x   x   x   x   x   x   x
x   x   x   x   x   x   x   x   x   x
x   x   x   x   x   x   x   x   x   x
x   x   x   x   x   x   x   x   x   x
x   x   x   x   x   x   x   x   x   x
x   x   x   x   x   x   x   x   x   x
x   x   x   x   x   x   x   x   x   x
x   x   x   x   x   x   x   x   x   x
x   x   x   x   x   x   x   x   x   x
x   x   x   x   x   x   x   x   x   x

①k为0则无黑格,结果为1

②k为1-9不满足条件,结果为0

③k为10代表一行或者一列满足条件,即C(10,1)*2

④k为11-18不满足条件,结果为0

⑤k为19代表一行和一列的组合,此时结果为C(10,1)*C(10,1)

...

⑥k为100,即所有涂黑,结果为1

至此所有的情况列举完毕。

再举一个k为60的情况,即为6个整行,或6个整列,或2整行5列,或5整行2列

解题方法,行列是对称的结果,以行先涂,列后涂

定义一个临时值temp初始赋值为k,不停的减n,同时记录x代表涂了几行。有两种情况,要么k为n的倍数,即③情况,要么不满足k为n的倍数,即⑤情况,后续代码两种情况需要区分。

对于⑤情况,即k减去n后的剩余值,是否为n-x的倍数,满足条件整除即可得到y(涂了几列),使用排列组合C(n,x)*C(n,y)即可

例子解析,可结合代码理解:

k为19,temp初始为19,第一次减去10,x记录为1,剩余值为9,9为n-x[10-1]的倍数,满足条件,y为9/(10-1)为1,结果为C(10,1)*C(10,1)

k为60为例子,temp初始化为60,第一次减去10,x记录为1,剩余50除以9除不尽。第二次减去10,剩余40除以8满足条件,y为40/8=5,x为2,使用排列组合得到结果C(10,2)*C(10,5),进行累加。第三次减去10,剩余30除以7除不尽。第四次减去10,剩余20除以6除不尽。第五次减去10,剩余10除以5满足条件,y为10/5=2,x为5,使用排列组合得到结果C(10,5)*C(10,2),进行累加。第六次减去10,剩余0,y为0,x为6,这种情况比较特殊,需要特殊处理,即C(10,6)*2。

代码解析:

第一种判断:if(k==0||(k==1&&n==1)||n*n==k)

①k=0代表无黑格,即不画,所以为1

②k和n都为1,即1×1的格子全部画黑,为1种情况

③n和k相等,即全部画黑,为1种情况

x为横排数量,temp为临时值,初始化等于k,对于k<n的为不满足条件的,例如n=10,k=8这种。

进行while循环,不停的减去n,同时累加x得到行数,进行取余得到y值,满足条件进行累加。

代码也可修改为temp<0。

执行结果:

LeetCode22-黑白方格画,简易解题方法相关推荐

  1. LCP 22. 黑白方格画(排列组合)

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

  2. LeetCode LCP 22. 黑白方格画

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

  3. LeetCode.黑白方格画

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

  4. LCP 22.黑白方格画

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

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

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

  6. leetcode 1. 黑白方格画

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

  7. leetcode黑白方格画

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

  8. 同底数幂比较大小方法_知识体系构建:初中数学4大知识点及10大解题方法总结(干货)...

    基本知识 1.数与代数 A.数与式: 1. 有理数 ■ 有理数: ①整数→正整数/0/负整数 ②分数→正分数/负分数 ■ 数轴: ①画一条水平直线,在直线上取一点表示0(原点),选取某一长度作为单位长 ...

  9. oracle8ir2,Oracle8iR2(oracle8.1.6)在redhat linux 7.1上的简易安装方法

    Oracle8iR2(oracle8.1.6)在redhat linux 7.1上的简易安装方法 时间:2006/7/19 2:15:17 作者:佚名 人气:78 安装oracle我也走了许多弯路,前 ...

  10. c语言 解元二次函数的源代码,学霸强推,高中数学万能解题方法,对数学一筹莫展的你必看!...

    数学不好怎么办,你有多头疼数学成绩?你还担心自己学不好数学吗?其实只要掌握学习的方法,数学就能迅速提升. 今天,小编整理了一份学霸们强推的数学解题方法,对大家肯定有帮助,数学不好的一定要看! 本文适合 ...

最新文章

  1. Azure Neural TTS能让AI语音自然逼真到什么程度?
  2. python2的默认数字类型_1.2python基础_数字类型_数字(Number)类型
  3. win定时关机_如何让电脑定时自动关机
  4. java 运行管理-基础
  5. [译]Flask教程--Cookie
  6. composer 无法更新vonder
  7. paip.Adblock屏蔽onlinedown华军软件园的4秒下载广告总结..
  8. 更高速 更智能 WLAN领域H3C再获领先——H3C发布新一代高性能802.11n 无线产品
  9. ADB各种操作指令详解大汇总
  10. 大数据下的精准实时监控系统 | Promethus or Zabbix?
  11. TopCoder SRM(Arena) 一日游记
  12. 基于freeswitch1.6的IVR智能语音机器人交互逻辑lua脚本
  13. C语言基于easyx的打字训练软件。
  14. strcpy函数和strcat函数
  15. 使用 ChatterBot 做简单的机器人
  16. 机器学习中的数学——常用概率分布(一):伯努利分布(Bernoulli分布)
  17. C++八股文分享---数据结构其二---哈希表
  18. 情人节 玫瑰花表白源码
  19. 关于Oracle执行sql语句报错[ORA-01722: invalid number]无效数字解决思路
  20. 中国互联网公司都要国际化,美图如何成为出海的另类?

热门文章

  1. swift5.0的网络请求与数据解析
  2. labview波形图表横轴使用当前时间
  3. DDOS工具-DDoS-Ripper
  4. 本地 vs. 云:大数据厮杀的最终幸存者会是谁?— InfoQ专访阿里云智能通用计算平台负责人关涛... 1
  5. [洛谷] P1893 山峰瞭望
  6. HP Compaq 510 拆机图解
  7. 辛苦了一年发年终奖啦 公司不会告诉你的4件事
  8. 将色彩鲜艳的照片变成偏黑白的淡彩特效
  9. 《移动互联网创新应用》研习班(一)
  10. 法律硕士选校不能不关注的三个因素