今天做了一道dp的题,感觉和今年中科大夏令营上机题神似,题目如下(来自leetcode):

我的思路是设置一个二维数组dp,来保存一些信息。这个dp[i][j]保存的是什么呢?是以点 (i,j) 为正方形右下角顶点所能组成的正方形变成。例如上图的示例1,有:

dp=
[
    [0,1,1,1],
    [1,1,2,2],
    [0,1,2,3]
]

那么我们最终要计算的的就是数组dp的和。因此问题转化成了如何求dp。

当 matrix[i][j] == 0,显然 dp[i][j] == 0,因为如果以点 (i,j) 为一个正方形的右下角,肯定是构不成正方形的;

当 matrix[i][j] == 1,且i == 0或j == 0时,dp[i][j]==1;

当 matrix[i][j] == 1,且i > 0和j > 0时,需要从点 (i,j) 出发,向上和左方向去搜索 dp[i-1][j-1] 个单位,如果遇到0则跳出,反之不断加1。

AC代码如下:

class Solution {public:int countSquares(vector<vector<int>>& matrix) {int n = matrix.size();int m = matrix[0].size();vector<vector<int>> dp(n,vector<int>(m,0));int cnt = 0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){//原矩阵数值为0,则dp为0if(matrix[i][j]==0){dp[i][j] = 0;}//原矩阵数值为1,先令dp为1else if(matrix[i][j]==1){dp[i][j] = 1;}//如果原矩阵点的值为1,且该点上侧和左侧非空if(i>=1&&j>=1&&matrix[i][j]==1){//分别向上和向左搜索dp[i-1][j-1]个单位for(int k=1;k<=dp[i-1][j-1];k++){//如果上侧和左侧的值都为1,则dp自增1if(matrix[i-k][j]==1&&matrix[i][j-k]==1){dp[i][j]++;}//遇到0跳出else{break;}}}cnt += dp[i][j];}}return cnt;}
};

leetcode 1277相关推荐

  1. LeetCode 1277. 统计全为 1 的正方形子矩阵(DP)

    1. 题目 给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数. 示例 1: 输入:matrix = [[0,1,1,1],[1, ...

  2. LeetCode 1727. 重新排列后的最大子矩阵(前缀和+排序)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列. 请你返回最优方案下将 matrix ...

  3. LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat , 请你返回有多少个 子矩形 的元素全部都是 1 . 示例 1: 输入:mat ...

  4. taoqick 搜索自己CSDN博客

    L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...

  5. Leetcode动态规划部分典型题目分类及总结

    参考内容 https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zhong-xin-kuo-san-dong- ...

  6. [LeetCode]135.Candy

    [题目] There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  7. LeetCode 从零单刷个人笔记整理(持续更新)

    更新至2020.2.23 github:https://github.com/ChopinXBP/LeetCode-Babel 本人博客用于个人对知识点的记录和巩固. 用几乎所有可行的方法进行了实现和 ...

  8. 【LeetCode】(55)Jump Game(Medium)

    题目 Jump Game Total Accepted: 52275 Total Submissions: 194395My Submissions Question  Solution  Given ...

  9. leetcode解题思路(无代码) 归类汇总版,面试笔试经典例题

    我将舍弃没有巧妙解法的简单题.部分题干.代码实现.非关键步骤,目的是做成一篇每次面试前都能过一遍的思路问答题. 在我仅有的面试经验中,面试官似乎会按知识点提问.因此我认为归类极其重要. 简单的题不一定 ...

最新文章

  1. QIIME 2用户文档. 15进行纵向和成对样本比较q2-longitudinal(2018.11)
  2. 作者为何要写《简约之美》这本书?程序员们又能从中学到什么呢?
  3. 中国开源正在走向成熟!
  4. job kettle 导出_kettle从hive2导出数据正常,但是用kettle manager启动就报错
  5. mysql错误修改数据_使用正则表达式快速修改mysql中错误的varchar类型数据
  6. python核心编程:杂记2
  7. 【Axure9.0原型实战(一)】Axure9.0的元件库的使用、导入、制作、路径等操作方法与技巧(附Axure元件库大全)
  8. 2022年低压电工考试及低压电工模拟考试题库
  9. MATLAB自带函数实现经验模态分解总结
  10. XPS是什么格式?如何免费转换为word?
  11. 几何平均回归Geometric Mean Regression——使用Python实现
  12. mysql 本周、上周、本月、上月SQL 语句
  13. LeetCode1156. 单字符重复子串的最大长度
  14. SylixOS 技术简介
  15. /usr/bin/ld: cannot find -lnl-genl-3
  16. xshell免费版下载教程
  17. 使用2019.2 Terrain Tools更新来加速Terrain Material绘画
  18. 修改Unity3d Asset Store 默认下载文件位置?
  19. 整型到底占几个字节呢?
  20. 1.荔枝派 zero(全志V3S)-编译及SD烧录

热门文章

  1. princomp.m
  2. 人工智能领域6大关键创新,AI可以用在哪些领域?
  3. 关于mac下搭建php、apache、mysql环境
  4. PAT (Basic Level) Practice (中文)题目集合
  5. Idel插件jrebel安装以及破解教程
  6. 服装检索相关论文阅读
  7. Android 10.0 当安装多个播放器时,设置默认播放器播放歌曲
  8. 实践中的重构19_脱裤子放屁
  9. ACL 2020 MART: Memory-Augmented Recurrent Transformer for Coherent Video Paragraph Captioning
  10. java jen部署_CSS布局:Jen Simmons的网格,区域和@Supports