技巧1:二维矩阵按索引拍平到一维数组

  • 如下图所示,每一个二维矩阵对应的,按第1行到第m行依次排列所得到的一维数组的坐标,可以互相转换
如第2行第3列的16这个数,其矩阵的坐标是(1,2),而映射到一维数组的时候,其对应的下标索引idx=6
idx=6=i*n+j=1*4+2=6
而如何通过idx=6反向得到矩阵的坐标呢?
i=idx/n=6/4 =1
j=idx%n=6%4 =2
得到矩阵的坐标为(i,j) ==>(1,2)

技巧2:将矩阵当成二进制转化成十进制

背景知识

  • 对于十进制整数 x,我们可以用x & 1 得到 x 的二进制表示的最低位,它等价于x % 2

    • 例如当x = 3 时,x 的二进制表示为 11x & 1的值为 1

    • 例如当 x = 6 时,x 的二进制表示为 110x & 1 的值为0

  • 对于十进制整数 x,我们可以用x & (1 << k) 来判断 x 二进制表示的第 k位(最低位为第0 位)是否为 1。如果该表达式的值大于零,那么第k 位为 1

    • 例如当 x = 3 时,x 的二进制表示为 11x & (1 << 1) = 11 & 10 =10 >0,说明第 1 位为 1
    • 例如当 x = 5 时,x 的二进制表示为 101x & (1 << 1)= 101 & 10 = 0,说明第 1 位不为 1

举例

给定一个矩阵:

[[0, 0, 1],
[1, 0, 0],
[0, 1, 1]]

该矩阵如果按每行依次排开的话,可以转换成一维矩阵

[0, 0, 1, 1, 0, 0, 0, 1, 1]

将上述的一维矩阵看成一个二进制的数是:

001100011

对应的十进制是99

怎么转化

  • 一个矩阵转化成二进制数再转化成十进制数:
        /*** * @param matrix 二维矩阵* @param R 矩阵的行数* @param C 矩阵的列数* @return*/private int encode(int[][] matrix, int R, int C) {int x = 0;for (int r = 0; r < R; r++) {for (int c = 0; c < C; c++) {x = x * 2 + matrix[r][c];}}return x;}
  • 一个十进制的数如何转化为二进制的矩阵:
        /*** @param x 源数* @param R 矩阵的行数* @param C 矩阵的列数* @return*/private int[][] decode(int x, int R, int C) {int[][] matrix = new int[R][C];for (int r = R - 1; r >= 0; r--) {for (int c = C - 1; c >= 0; c--) {matrix[r][c] = x & 1;x >>= 1;}}return matrix;}

Reference

  • https://leetcode-cn.com/problems/minimum-number-of-flips-to-convert-binary-matrix-to-zero-matrix/solution/zhuan-hua-wei-quan-ling-ju-zhen-de-zui-shao-fan-2/

二维矩阵的常见转换技巧相关推荐

  1. openCV图像矩阵Mat和二维数组的互相转换

    openCV图像矩阵Mat和二维数组的互相转换 在openCV的应用中,我们获取图像的矩阵信息很简单.但是我们可能想调用其他的矩阵运算库(比如Eigen库)来进行计算.那么我们就需要把openCV读取 ...

  2. 二维数组的花式遍历技巧盘点

    学算法认准 labuladong 后台回复 进群 进刷题 读完本文,可以去力扣解决如下题目: 48. 旋转图像(中等) 54. 螺旋矩阵(中等) 59. 螺旋矩阵 II(中等) 有不少读者说,看过很多 ...

  3. 【Matlab】一种超简单的二维矩阵降维方法

    1.Introduction Matlab里图像处理时,经常会把一维数组转二维数组,二维数组转一维,如下图所示: 一般经常使用的函数是 reshape ,可以在不同维度之间进行转换,不过需要事先计算数 ...

  4. 一维矩阵和二维矩阵的前缀和

    目录 一维数组的前缀和 二维矩阵的前缀和 前缀和技巧适用于快速.频繁地计算一个索引区间内的元素之和. 一维数组的前缀和 若求区域和的方法sumRange ()存在多次调用, 那么在求子区域元素之和时, ...

  5. matlab 把图像变成二维的,matlab图像怎么变成二维矩阵

    求:matlab二维直方图图像分割程序.. 我给你个网站``里面的教学很详细~~希望能帮到你~~~~反正里面的软件教程很多``就是不知道有没你要找的``如果有~~给我加分哈``http://tech. ...

  6. c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  7. 机器学习之数学基础(二)~数组、向量、矩阵、向量空间、二维矩阵

    1. 概述 在学习机器学习(machine learning)或模式识别(pattern recognition)过程中,我经常会困惑于向量.数组和矩阵这三种数据结构,而在学习张学工教授<模式识 ...

  8. python 搜索二维矩阵

    搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入:m ...

  9. python 二维矩阵翻转

    二维矩阵翻转 # N * N的二维矩阵 # 沿上下中线翻转 # 沿左右中线翻转 # 沿-45度对角线翻转 # 沿45度对角线翻转matrix3 = [[1, 2, 3, 4, 5], [6, 7, 8 ...

最新文章

  1. 麦肯锡:优秀数据科学家的5个特征!
  2. Java测试工具使用(1)--Junit
  3. Linux服务器中实现文件夹可写不可删除
  4. C++智能指针 shared_ptr、weak_ptr
  5. 前台特效(9)无限极分类折叠菜单
  6. yml php,使用 docker-compose.yml 快速搭建php开发环境
  7. Hive大数据-Hive的安装与启动---大数据之Hive工作笔记0005
  8. java编译环境有问题_java: 用JCeator编译器,编译出现问题怎么解决?
  9. Linux-shell获取天气
  10. 利用计算机计算问题的案例,两个基于计算思维培养的高中信息技术教学案例
  11. invalid method declaration
  12. 转 从决策树学习谈到贝叶斯分类算法、EM、HMM
  13. 计算机财务管理专业有哪些课程设计,财务管理专业课程设计模版.pdf
  14. shell 中如何输出回车符号
  15. 核心项目:高并发秒杀系统(项目介绍,项目搭建,数据库,DAO)
  16. autoconf 报错
  17. for循环去掉最后一个逗号(三种方法)
  18. IIC/I2C总线实验
  19. Clothoid回旋曲线在APA路径优化中的工程应用实例及其C++源码分析与下载
  20. 中国科学院大学计算机学院夏令营,中国科学院大学计算机网络信息中心2019年推免夏令营通知...

热门文章

  1. python怎么下载网络歌曲_教你如何用Python批量下载自己喜欢听得音乐
  2. jsp怎么操作html标签,JSP、HTML标签
  3. java for循环定义变量,在java语言里for循环里的变量如何声明在外面进行使用。
  4. 凯勒姆机器人系统_机器人吸塑切割,
  5. 现代间谍技术的演变:从“王牌特工”到“行走的50w”
  6. html 隐藏域 用什么标签,html中隐藏域hidden的做用介绍及使用示例
  7. 【附源码】Python计算机毕业设计农产品销售平台
  8. 转-IE浏览器自动配置代理脚本-Proxy.PAC文件及PAC相关语法
  9. 常见深度学习模型集成方法
  10. 智慧工地管理平台系统—智慧工地整体解决方案