牛客堂刷题(常见面试题精讲)之矩阵打印
来源:互联网 发布:手机编曲软件中文版 编辑:程序博客网 时间:2024/06/05 16:42
题目:
实现转圈打印矩阵
1 2 3 4
10 11 12 5
9 8 7 6
输出是1 2 3 4 5 6 7 8 9 10 11 12
思路:
每次只需要打印一圈即可,然后左上角坐标都加1,右下角都减一,当两个的坐标错过去了就停止代码:
public class CircleMatrix { public static void main(String[] args) {// int [][] num = {// {1,2,3,4},// {10,11,12,5},// {9,8,7,6}// }; Scanner sc = new Scanner(System.in); int row=0,col=0; //输入矩阵的行和列row = sc.nextInt();col = sc.nextInt(); int [][] num = new int[row][col]; for(int i=0;i<row;i++) for(int j=0;j<col;j++) num[i][j]=(int)(Math.random()*100); for(int i=0;i<num.length;i++){ for(int j=0;j<num[0].length;j++) System.out.print(num[i][j]+" "); System.out.println();} System.out.println("输出后:"); printCircleMatrix(num); }private static void printCircleMatrix(int[][] num) { int startx = 0,starty=0; int endx = num.length-1,endy=num[0].length-1; while(endx>=startx||endy>=starty) { if(startx==endx)//只有一行时 { for(int k=starty;k<=endy;k++) System.out.print(num[startx][k]+" "); }else if(starty==endy)//只有一列时 { for(int k=startx;k<=endx;k++) System.out.print(num[k][starty]+" "); }else { int i,j; for(i=startx;i<endy;i++) System.out.print(num[startx][i]+" "); for(j=starty;j<endx;j++) System.out.print(num[j][endy]+" "); for(;i>starty;i--) System.out.print(num[endx][i]+" "); for(;j>startx;j--) System.out.print(num[j][starty]+" "); if((endx==startx)&&(endy==starty)) System.out.print(num[startx][starty]+"?"); } startx++;starty++; endx--;endy--; } }}
进阶题目:
之字形打印,即蛇形输出
输入矩阵实例:
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指向左上角第一个,两个坐标确定一条斜线,从 i 到 j , 然后i右移,j下移,确定2~~5这一条斜线,以此类推,然后便是确定方向即可,
设置个布尔变量,一次上一次下,i走到尽头往下走,j走到尽头往右走,即可。
设置个布尔变量,一次上一次下,i走到尽头往下走,j走到尽头往右走,即可。
下列代码是输入行列数,然后产生一个随机矩阵,对其进行蛇形输出。
代码:
public class PrintThisMatrix {public static void main(String[] args) {////int [][] num = {//{1,2,3,4},//{5,6,7,8},//};Scanner sc = new Scanner(System.in);int row=0,col=0; System.out.println("请输入行列数:");while(sc.hasNext()){row = sc.nextInt(); col = sc.nextInt(); if(row>0&&col>0)break; else{ System.out.println("输入错误,请重新输入"); }} int [][] num = new int[row][col];for(int i=0;i<row;i++)for(int j=0;j<col;j++)num[i][j] = (int)(Math.random()*100);System.out.println("原数组:");for(int i=0;i<row;i++){for(int j=0;j<col;j++)System.out.print(num[i][j]+" ");System.out.println();}printMatrix(num);sc.close();} private static void printMatrix(int[][] num) {boolean flag =true;int index=0;int cnt=0;int length = num[0].length+num.length-1;Point right = new Point(0,0);Point left = new Point(0,0);boolean tagRight=false,tagLeft=false;while(cnt<length){if(!flag)//从上往下{//i(0,2)==>j(2,0) 横坐标加1,纵坐标减1Point tempi = new Point(left);tempi.translate(1, -1);Point tempj = new Point(right);while(!tempj.equals(tempi)){System.out.print(num[tempj.x][tempj.y]+" ");tempj.translate(1,-1);}System.out.println();}else//从下往上{//j(1,0)==>i(0,1) 横坐标减1,纵坐标加1Point tempj = new Point(right);tempj.translate(-1, 1);Point tempi = new Point(left);//依次从下往上遍历while(!tempi.equals(tempj)){System.out.print(num[tempi.x][tempi.y]+" ");tempi.translate(-1, 1);}System.out.println();}//right走到最右边,然后要往下走if(right.equals(new Point(0,num[0].length-1)))tagRight=true;//left走到最下边,然后往右走if(left.equals(new Point(num.length-1,0)))tagLeft=true;if(!tagRight){right.translate(0, 1);}else{right.translate(1, 0);}if(!tagLeft){left.translate(1, 0);}else{left.translate(0, 1);}cnt++;//调整方向,一次上一次下if(index%2==0){flag=true;}else{flag=false;}index++;} }}
0 0
- 牛客堂刷题(常见面试题精讲)之矩阵打印
- 牛客堂刷题(常见面试题精讲)之左右最大值之差
- 牛客堂刷题(常见面试题精讲)之最长回文序列
- 牛客堂刷题(常见面试题精讲)之随机概率
- 牛客堂刷题(常见面试题精讲)之最短子数组长度
- 牛客堂常见面试题精讲(一)1
- 牛客堂常见面试题精讲(一)2
- 牛客堂常见面试题精讲(一)3
- 牛客堂常见面试题精讲(一)4
- 牛客堂常见面试题精讲(一)5
- 牛客堂刷题之最大乘积
- 牛客堂刷题之变态二分
- 牛客堂刷题之Manacher算法
- 牛客堂刷题之KMP
- 面试题20:打印矩阵
- 剑指offer之面试题20:顺时针打印矩阵
- 剑指offer之面试题20顺时针打印矩阵
- 剑指Offer之面试题20:顺时针打印矩阵
- Tarjan 的应用
- 音乐播放器-Activities
- CodeForces 400A Inna and Choose Options
- C++实现的屏幕截图(PNG或BMP)
- NSUserDefaults SQLite CoreData
- 牛客堂刷题(常见面试题精讲)之矩阵打印
- IE7浏览器下CSS属性选择器二三事
- NSURLCache 2 内存缓存
- Java命名规范与注释规范
- Java如何使用迭代器?
- NSURLCache && NSCachedURLResponse
- 【安卓-动画】使用ObjectAnimator实现ArcMenu动画效果
- iOS中的七大手势
- gradle project refresh failed: protocol family unavailable