lintcode刷题--之字形打印矩阵
来源:互联网 发布:usb数据采集卡驱动 编辑:程序博客网 时间:2024/05/17 03:14
题目:
容易 矩阵的之字型遍历
给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。样例
对于如下矩阵:
[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10, 11, 12]]
返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]
方向:右、左下、右上、下;
思路:根据当前位置(i,j)和上一步的方向,决定下一步的方向
代码:
public class Solution {
/**
* @param matrix: a matrix of integers
* @return: an array of integers
*/
public int[] printZMatrix(int[][] matrix) {
// write your code here
if(matrix == null)
return null;
int m = matrix.length;
if(m == 0)
return null;
int n = matrix[0].length;
int[] array = new int[m*n];
int loc =0;
if(n == 0)
return null;
boolean flag = true;
int i =0;
int j =0;
int RIGHT = 0;
int LEFTDOWN = 1;
int DOWN = 2;
int RIGHTUP = 3;
int state = -1;
if(m == 1){
for(int k=0; k<n;k++){
array[loc++] = matrix[0][k];
}
return array;
}
if(n==1){
for(int k=0; k<m;k++){
array[loc++] = matrix[k][0];
}
return array;
}
while(loc < m*n){
if(i!=0 || j!=0){
array[loc++] = matrix[i][j];
switch(state){
case 0://RIGHT
if(i == 0){//LEFTDOWN
i++;
j--;
state = LEFTDOWN;
}else{//RIGHTUP
j++;
i--;
state = RIGHTUP;
}
break;
case 1://LEFTDOWN
if(j == 0){
if(i<m-1){//DOWM
i++;
state = DOWN;
}else{
j++;
state = RIGHT;
}
}else{//LEFTDOWN
if(i == m-1){//RIGHT
j++;
state = RIGHT;
}else{
i++;
j--;
state = LEFTDOWN;
}
}
break;
case 2://DOWN
if(j==0){
// if(i<m-1){//RIGHTUP
i--;
j++;
state = RIGHTUP;
}else if(j == n-1){//LEFTDOWN
i++;
j--;
state = LEFTDOWN;
}
break;
case 3://RIGHTUP
if(i == 0){
if(j != n-1){//RIGHT
j++;
state = RIGHT;
}else{//DOWN
i++;
state = DOWN;
}
}else{
if(j == n-1){//DOWM
i++;
state = DOWN;
} else{//RIGHTUP
j++;
i--;
state = RIGHTUP;
}
}
break;
}
}else{
array[loc++] = matrix[0][0];
state = RIGHT;
j++;
}
}
return array;
}
}
- lintcode刷题--之字形打印矩阵
- 之字形打印矩阵
- 之字形打印矩阵
- 之字形打印矩阵
- 之字形打印矩阵
- 之字形打印矩阵
- firstday-之字形打印矩阵
- c++-之字形打印矩阵
- 算法:之字形来回打印矩阵
- 之字形打印矩阵(Java)
- 旋转打印矩阵、旋转存储矩阵、之字形打印矩阵
- 顺时针打印矩阵、矩阵顺时针转动90、之字形打印矩阵
- 编程题(之字形打印矩阵)
- 矩阵------顺时针打印矩阵+顺时针旋转矩阵+之字形打印矩阵(Java)
- 之字形(Zigzag)遍历/打印/提取矩阵元素算法
- 之字形(Zigzag)遍历/打印/提取矩阵元素算法
- 之字形打印二叉树
- 之字形打印二叉树
- PRVF-0002 : 无法检索本地节点名
- 用jPlayer实现网页在线视频播放
- Ipimage 转mat
- Nginx+Tomcat+Memcached集群
- OMPL138及U-Boot的启动过程分析(一)
- lintcode刷题--之字形打印矩阵
- easyui-progressbar进度条
- 自守数的问题
- 规则化和模型选择(Regularization and model selection)
- linux grep ,tab 制表符 命令用法
- 【蓝桥杯】【第39级台阶】
- 分解质因数
- React Native 篇之 自定义组件、引入组件、页面跳转
- iOS 判断邮箱 手机号 是否正确