题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:
1  2  3  4 
5  6  7  8
9  10  11  12
13  14  15  16
则依次打印出数字1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10。

测试用例:
数组有多行多列,数组只有一行,数组中只有一列,数组中只有一行一列
 
代码实现:
package com.yyq;

/**
* Created by Administrator on 2015/9/16.
*/
public class PrintMatrix {
public static void printMatrixClockwisely(int[][] numbers, int columns, int rows){
if (numbers == null || columns < 0 || rows < 0){
return;
}
int start = 0;
while(columns > start * 2 && rows > start * 2){
printMatrixInCircle(numbers,columns,rows,start);
start ++;
}
}
public static void printMatrixInCircle(int[][] numbers, int columns, int rows, int start){
int endX = columns - 1 - start;
int endY = rows - 1 - start;
//从左到右打印一行
for (int i = start; i <= endX; i++){
int number = numbers[start][i];
printNumber(number);
}
//从上到下打印一列
if (start < endY){
for (int i = start+1; i <= endY; i++){
int number = numbers[i][endX];
printNumber(number);
}
}
//从右到左打印一行
if (start < endX && start < endY){
for (int i = endX - 1; i >= start; i--){
int number = numbers[endY][i];
printNumber(number);
}
}
if (start < endX && start < endY - 1){
for (int i = endY - 1; i >= start+1; i--){
int number = numbers[i][start];
printNumber(number);
}
}
}
public static void printNumber(int number){
System.out.print(number+"\t");
} // ====================测试代码====================
public static void Test(String testName, int columns, int rows)
{
System.out.println(testName+" Begin: " + columns + " columns, " + rows + " rows.");
if(columns < 1 || rows < 1)
return; int[][] numbers = new int[rows][columns];
for(int i = 0; i < rows; ++i)
{
for(int j = 0; j < columns; ++j)
{
numbers[i][j] = i * columns + j + 1;
}
}
printMatrixClockwisely(numbers, columns, rows);
System.out.println("");
} public static void main(String[] args){
/*
1
*/
Test("test1",1, 1); /*
1 2
3 4
*/
Test("test2",2, 2); /*
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
*/
Test("test3",4, 4); /*
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
*/
Test("test4",5, 5); /*
1
2
3
4
5
*/
Test("test5",1, 5); /*
1 2
3 4
5 6
7 8
9 10
*/
Test("test6",2, 5); /*
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
*/
Test("test7",3, 5); /*
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
*/
Test("test8",4, 5); /*
1 2 3 4 5
*/
Test("test9",5, 1); /*
1 2 3 4 5
6 7 8 9 10
*/
Test("test10",5, 2); /*
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
*/
Test("test11",5, 3); /*
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
*/
Test("test12",5, 4); Test("test13",0,0);
}
}
 
输出结果:
test1 Begin: 1 columns, 1 rows.
1
test2 Begin: 2 columns, 2 rows.
1 2 4 3
test3 Begin: 4 columns, 4 rows.
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
test4 Begin: 5 columns, 5 rows.
1 2 3 4 5 10 15 20 25 24 23 22 21 16 11 6 7 8 9 14 19 18 17 12 13
test5 Begin: 1 columns, 5 rows.
1 2 3 4 5
test6 Begin: 2 columns, 5 rows.
1 2 4 6 8 10 9 7 5 3
test7 Begin: 3 columns, 5 rows.
1 2 3 6 9 12 15 14 13 10 7 4 5 8 11
test8 Begin: 4 columns, 5 rows.
1 2 3 4 8 12 16 20 19 18 17 13 9 5 6 7 11 15 14 10
test9 Begin: 5 columns, 1 rows.
1 2 3 4 5
test10 Begin: 5 columns, 2 rows.
1 2 3 4 5 10 9 8 7 6
test11 Begin: 5 columns, 3 rows.
1 2 3 4 5 10 15 14 13 12 11 6 7 8 9
test12 Begin: 5 columns, 4 rows.
1 2 3 4 5 10 15 20 19 18 17 16 11 6 7 8 9 14 13 12
test13 Begin: 0 columns, 0 rows.

P127、面试题20:顺时针打印矩阵的更多相关文章

  1. 剑指Offer:面试题20——顺时针打印矩阵(java实现)

    题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...

  2. 《剑指offer》面试题20 顺时针打印矩阵 Java版

    我的方法:遇到这种题最好在纸上画一画打印路线.我利用了4个标志left.top.right.bottom,表示当前需要打印的左界.上届.右界和下界,换句话说这些界线之外的已经打印了,如此一来判断结束的 ...

  3. 剑指offer-面试题20.顺时针打印矩阵

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如: 输入一个矩阵如下: 则依次打印出数字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10 这道题的 ...

  4. 剑指 offer面试题20 顺时针打印矩阵

    [题目描述] 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...

  5. 【剑指offer】面试题 29. 顺时针打印矩阵

    面试题 29. 顺时针打印矩阵 题目描述 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  6. 【剑指offer】题目20 顺时针打印矩阵

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1   2   3  4 5   6   7  8 9  10 11 12 13 14 15 16 则依次打印出 ...

  7. 《剑指offer》面试题29. 顺时针打印矩阵

    问题描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4 ...

  8. 《剑指offer》第二十九题(顺时针打印矩阵)

    // 面试题29:顺时针打印矩阵 // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. #include <iostream> void PrintMatrixInC ...

  9. 【剑指offer】顺时针打印矩阵

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...

  10. php笔试算法题:顺时针打印矩阵坐标-蛇形算法

    这几天参加面试,本来笔试比较简单,但是在面试的时候,技术面试官说让我现场写一个算法,顺时针打印矩阵的坐标,如图所示 顺序为,0,1,2,3,4,9,14,19,24,23,22,21,20,15,10 ...

随机推荐

  1. 数据库(MSSQLServer,Oracle,DB2,MySql)常见语句以及问题

    创建数据库表 create table person ( FName varchar(), FAge int, FRemark varchar(), primary key(FName) ) 基本sq ...

  2. JS自定义属性的设置与获取

    以前感觉用JQuery来设置自定义属性很方便,现在没有用JQuery,要用原生的JavaScript来操作自定义属性. Jquery操作自定义属性的方法,很简洁: $("#test" ...

  3. opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用

    opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用

  4. RequireJS入门与进阶

    RequireJS由James Burke创建,他也是AMD规范的创始人. RequireJS会让你以不同于往常的方式去写JavaScript.你将不再使用script标签在HTML中引入JS文件,以 ...

  5. python字典根据value排序

    参考: http://docs.python.org/2/howto/sorting.html http://www.cnpythoner.com/post/266.html http://ghost ...

  6. CodeForces 18C

    Description Once Bob took a paper stripe of n squares (the height of the stripe is 1 square). In eac ...

  7. 微软职位内部推荐-Sr SDE-MOD-Beijing

    微软近期Open的职位: JOB TITLE: Senior Software Design EngineerDEPARTMENT: Microsoft Office Division ChinaIM ...

  8. 轻仿QQ音乐之音频歌词播放、锁屏歌词-b

    先上效果图 歌词播放界面 音乐播放界面 锁屏歌词界面 一. 项目概述 前面内容实在是太基础..只想看知识点的同学可以直接跳到第三部分的干货 项目播放的mp3文件及lrc文件均来自QQ音乐 本文主要主要 ...

  9. tableView中不易被注意到的方法

    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ } 这个方法 在 r ...

  10. (转)火溶CEO王伟峰:Unity3D手机网游开发

    今天看到这篇文章,感觉很不错,尤其是那句“Unity3D的坑我觉得最严重的坑就是没有懂3D的程序员,把Unity当成Office用”. 转自http://blog.csdn.net/wwwang891 ...