P127、面试题20:顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:
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);
}
}
P127、面试题20:顺时针打印矩阵的更多相关文章
- 剑指Offer:面试题20——顺时针打印矩阵(java实现)
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...
- 《剑指offer》面试题20 顺时针打印矩阵 Java版
我的方法:遇到这种题最好在纸上画一画打印路线.我利用了4个标志left.top.right.bottom,表示当前需要打印的左界.上届.右界和下界,换句话说这些界线之外的已经打印了,如此一来判断结束的 ...
- 剑指offer-面试题20.顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如: 输入一个矩阵如下: 则依次打印出数字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10 这道题的 ...
- 剑指 offer面试题20 顺时针打印矩阵
[题目描述] 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...
- 【剑指offer】面试题 29. 顺时针打印矩阵
面试题 29. 顺时针打印矩阵 题目描述 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 【剑指offer】题目20 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出 ...
- 《剑指offer》面试题29. 顺时针打印矩阵
问题描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4 ...
- 《剑指offer》第二十九题(顺时针打印矩阵)
// 面试题29:顺时针打印矩阵 // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. #include <iostream> void PrintMatrixInC ...
- 【剑指offer】顺时针打印矩阵
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...
- php笔试算法题:顺时针打印矩阵坐标-蛇形算法
这几天参加面试,本来笔试比较简单,但是在面试的时候,技术面试官说让我现场写一个算法,顺时针打印矩阵的坐标,如图所示 顺序为,0,1,2,3,4,9,14,19,24,23,22,21,20,15,10 ...
随机推荐
- iOS SEL的简单总结
@interface Person : NSObject + (void)test1; - (void)test2; @end // 根据.h文件中定义的Person类和方法 执行完这行代码 在内存中 ...
- ubuntu vim 7.4 编译安装
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.到官网 http://www.vim.org/download.p ...
- A version is required for an API group definition.
A version is required for an API group definition.
- Setfocus - IE 需要使用setTimeout
setTimeout(function () { $('#controlid').focus(); }, 100); document.getElementById('filterPopupInput ...
- SendMessage 窗口函数
函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回. MSD ...
- linux 输入子系统(1)----系统概述
输入设备的工作中,只是中断.读键值/坐标值是设备相关的,而输入事件的缓冲区管理以及字符设备驱动的file_operations接口则对输入设备是通用的,基于此,内核设计了input输入子系统,由核心层 ...
- leetcode学习笔记--开篇
1 LeetCode是什么? LeetCode是一个在线的编程测试平台,国内也有类似的Online Judge平台.程序开发人员可以通过在线刷题,提高对于算法和数据结构的理解能力,夯实自己的编程基础. ...
- Pox启动及事件产生、监听分析
./pox/pox.py , Pox 实例化core=pox.core.initialize(),即为实例化POXCore类(该类是所有组件的交接点,提供组件注册功能),监听cor ...
- Web服务器集群搭建关键步骤纪要
前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: ...
- Beaglebone Back学习一(开发板介绍)
随着开源软件的盛行.成熟,开源硬件也迎来了春天,先有Arduino,后有Raspherry Pi,到当前的Beaglebone .相信在不久的将来,开源项目将越来越多,越来越走向成熟. ...