2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。
2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。
福大大 答案2021-04-02:
两个for循环嵌套。
外层循环。先遍历第一列,再遍历不包含列号为0的最后一行。每循环一次,修改标志位。
内层循环。根据标志位判断,从左下到右上,还是从右上到左下。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
arr := [][]int{
{0, 1, 2},
{3, 4, 5},
{6, 7, 8}}
printMatrixZigZag(arr)
}
func printMatrixZigZag(matrix [][]int) {
row := len(matrix)
col := len(matrix[0])
fromUp := false
//遍历第一列
for i := 0; i < row; i++ {
if fromUp {
//找最右上的位置
j := 0
for ; i-j >= 0 && j < col; j++ {
}
j--
//右上到左下
for ; j >= 0; j-- {
fmt.Print(matrix[i-j][0+j], " ")
}
} else {
//左下到右上
for j := 0; i-j >= 0 && j < col; j++ {
fmt.Print(matrix[i-j][0+j], " ")
}
}
fromUp = !fromUp
}
//遍历最后一行
for j := 1; j < col; j++ {
if fromUp {
//找最右上的位置
i := 0
for ; row-1-i >= 0 && j+i < col; i++ {
}
i--
//右上到左下
for ; i >= 0; i-- {
fmt.Print(matrix[row-1-i][j+i], " ")
}
} else {
//左下到右上
for i := 0; row-1-i >= 0 && j+i < col; i++ {
fmt.Print(matrix[row-1-i][j+i], " ")
}
}
fromUp = !fromUp
}
}
执行结果如下:

2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。的更多相关文章
- 2018/04/02 每日一个Linux命令 之 新建/修改/删除群组
-- 新建群组 groupadd [群组名] -- 修改群组名称 groupmod [群组名] [新群组名] -n 修改组名 -g 修改组识别码 -- 删除群组 groupdel [删除的组名] --
- 2021.11.02 eleveni的水省选题的记录
2021.11.02 eleveni的水省选题的记录 因为eleveni比较菜,所以eleveni决定从绿题开始水 --实际上菜菜的eleveni连绿题都不一定能水过/忍不住哭了 [P2217 HAO ...
- 2021.04.24【NOIP提高B组】模拟 总结
2021.04.24[NOIP提高B组]模拟 总结 T1 题意:有一圈数.两两之间有加法或乘法操作, 问你开始断掉那条边使得剩下的序列经过某种操作后的值最大 看上去是个区间 dp .然后直接断环成列, ...
- ReactNative新手学习之路02第一个RN项目
开始第一个RN项目(iOS版)我的电影列表0.1版,后面做列表版 打开上一节项目 index.ios.js,android打开index.android.js.我这里使用的是Atom编辑器,你也可以使 ...
- 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。
分析,是一个dp的题目, 设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么 f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]} ...
- Java-集合=第五题 (Map)设计Account 对象如下: private long id; private double balance; private String password; 要求完善设计,使得该Account 对象能够自动分配id。 给定一个List 如下: List list = new ArrayList(); list.add(new A
第五题 (Map)设计Account 对象如下: private long id; private double balance; private String password; 要求完善设计,使得 ...
- 给定一个整数N,找出一个比N大且最接近N,但二进制权值与该整数相同 的数
1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值. 比如:十进制数1717 的二进制表示为:0000 0110 1011 01 ...
- Django - 02 优化一个应用
Django - 02 优化一个应用 上一篇中我们已经创建了一个blog app,现在来用一下~ 2.1 添加第一篇blog 这个post 列表很丑陋哦,连标题都木有显示~ 2.2 自定义bl ...
- mysql给定一个随机数
)) 给定一个1-50中间的随机数
- 课堂练习:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
题目 1 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 2 要求: (1) 写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12) ...
随机推荐
- P2671 [NOIP2015 普及组] 求和
[NOIP2015 普及组] 求和 题目背景 NOIP2015 普及组 T3 题目描述 一条狭长的纸带被均匀划分出了\(n\)个格子,格子编号从\(1\)到\(n\).每个格子上都染了一种颜色\(co ...
- WLAN的二层通信
WLAN的二层通信中,无线接口收发的报文有4个地址: 发送地址(Transimission address),接收地址(Recevie address),源地址(Source address),目的地 ...
- 1 关于win10原生系统下 OCRmyPDF安装使用
win10原生系统下 OCRmyPDF安装使用长期以来一直在代替freepic2pdf的工具,因为在图片转化PDF时,如果没有勾选该软件 添加OCR层 选项,印象中事后无法挂OCR层上去.福昕风腾,A ...
- Spring--AOP切入点表达式
AOP工作流程 能够与做代理的那个类匹配得上的话,叫做代理对象,否则为原始对象. (SpringAOP的本质:代理模式) AOP的切入点表达式 切入点表达式描述的标准格式 描述方式一:定位到某某包下的 ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——20.汇编语言读硬盘实战
学习操作系统原理最好的方法是自己写一个简单的操作系统. 本讲我们设计一个简单的读硬盘实验.通过一定的方法使硬盘第二个扇区的前3个字节依次为1.2.3,最后3个字节依次为3.2.1,中间的506个字节全 ...
- ZIP64压缩扩展的兼容性问题
一.ZIP压缩的两种规范 zip64 格式是标准 zip 格式的扩展,实际上消除了 zip 存档中文件大小和数量的限制. 每种格式允许的最大值总结如下: Standard Format Zip64 F ...
- IO流详解及常用方法
1.1. 什么是IO流 IO流: Input/Output Stream 流: 指的是一串流动的数据, 在数据在流中按照指定的方向进行流动. 实现数据的读取.写入的功能. 1.2. IO流的使用场景 ...
- Latex符号
上标 $\hat{x}$ : \(\hat{x}\) $\widehat{x}$ : \(\widehat{x}\) $\tilde{x}$ : \(\tilde{x}\) $\widetilde{x ...
- MyBatis缓存机制[NO]
前言 MyBatis是常见的Java数据库访问层框架.在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在 ...
- 高性能 Kafka队列的原理
一.原理简述 [1]Producer将消息进行分组分别发送到对应 Leader节点:[2]Leader将消息写入本地 log:[3]Followers从 Leader pull最新消息,写入 log后 ...