Q20:顺时针打印矩阵
2016-08-01 23:27
218 查看
public
class Q20 {
/**
*
题目:顺时针打印矩阵
*
题目说明:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
*
解题思路:将问题分为两个部分进行考虑,1)控制打印的圈数。2)如何实现打印一圈。
* 1)是根据起始点的特点(0,0)(1,1)来控制打印的圈数。2)是通过将一圈划分为从左到右,从上到下,从右到左,从下到上,四个部分来打印的。
*/
public
static void main(String[] args) {
int[][]array={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
Q20 test = new Q20();
test.printMatix(array);
}
public
void printMatix(int[][] array){
//判断数组的合法性
if(array ==
null){
return;
}
int start = 0;//打印起始点的坐标值(0,0),(1,1)
while(array[0].length > start*2 && array.length > start*2){
printMatixValue(array, start);
start++;
}
}
private
void printMatixValue(int[][] array,
int start){
//从左到右进行打印,行数不变,列数变化array[start][i]
for(int i = start; i < array[0].length-start; i++){
System.err.print(array[start][i]+",");
}
//从上到下进行打印,行数变化,列数不变array[i][array[0].length-1-start]
if(array.length-1-start > start){//只有行数大于start时才执行
for(int i = start+1; i < array.length-1-start; i++){//array.length-1-start表示本圈打印的行数的最大值
System.out.print(array[i][array[0].length-1-start]+".");//array[0].length-1-start表示本圈打印的列的下标值
}
}
//从右到左进行打印,行数不变,列数改变array[array.length-1-start][i]
if((array[0].length-1-start > start) && (array.length-start-1 > start)){//判断行数和列数均要大于start时才执行
for(int i = array.length-start-1; i > start; i--){
System.out.print(array[array.length-start-1][i]+";");
}
}
//从下到上进行打印,行数改变,列数不变array[i][start]
if((array.length-1-start > start) && (array[0].length-1-start > start)){
for(int i = array.length-1-start; i > start; i--){
System.out.print(array[i][start]+"。");
}
}
}
}
class Q20 {
/**
*
题目:顺时针打印矩阵
*
题目说明:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
*
解题思路:将问题分为两个部分进行考虑,1)控制打印的圈数。2)如何实现打印一圈。
* 1)是根据起始点的特点(0,0)(1,1)来控制打印的圈数。2)是通过将一圈划分为从左到右,从上到下,从右到左,从下到上,四个部分来打印的。
*/
public
static void main(String[] args) {
int[][]array={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
Q20 test = new Q20();
test.printMatix(array);
}
public
void printMatix(int[][] array){
//判断数组的合法性
if(array ==
null){
return;
}
int start = 0;//打印起始点的坐标值(0,0),(1,1)
while(array[0].length > start*2 && array.length > start*2){
printMatixValue(array, start);
start++;
}
}
private
void printMatixValue(int[][] array,
int start){
//从左到右进行打印,行数不变,列数变化array[start][i]
for(int i = start; i < array[0].length-start; i++){
System.err.print(array[start][i]+",");
}
//从上到下进行打印,行数变化,列数不变array[i][array[0].length-1-start]
if(array.length-1-start > start){//只有行数大于start时才执行
for(int i = start+1; i < array.length-1-start; i++){//array.length-1-start表示本圈打印的行数的最大值
System.out.print(array[i][array[0].length-1-start]+".");//array[0].length-1-start表示本圈打印的列的下标值
}
}
//从右到左进行打印,行数不变,列数改变array[array.length-1-start][i]
if((array[0].length-1-start > start) && (array.length-start-1 > start)){//判断行数和列数均要大于start时才执行
for(int i = array.length-start-1; i > start; i--){
System.out.print(array[array.length-start-1][i]+";");
}
}
//从下到上进行打印,行数改变,列数不变array[i][start]
if((array.length-1-start > start) && (array[0].length-1-start > start)){
for(int i = array.length-1-start; i > start; i--){
System.out.print(array[i][start]+"。");
}
}
}
}
相关文章推荐
- 剑指Offer面试题20(Java版):顺时针打印矩阵
- 顺时针旋转打印n阶矩阵(内测第0届第4题)
- 20. 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 剑指offer-面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 剑指offer面试题20 顺时针打印矩阵
- 程序员面试题精选100题(51)-顺时针打印矩阵
- 顺时针打印矩阵
- [python] 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字[顺时针打印矩阵]
- leetcode-54 Spiral Matrix 顺时针打印矩阵(《剑指offer》面试题20)
- 剑指offer面试题[20]-顺时针打印矩阵
- 20顺时针打印矩阵python
- 顺时针打印矩阵
- 剑指offer第19题(顺时针打印矩阵)
- 顺时针打印矩阵
- 《剑指offer》刷题笔记(画图让抽象形象化):顺时针打印矩阵