首页 > 代码库 > Zigzag数组
Zigzag数组
首先了解下zigzag数组,如下图,由一个矩阵的对角线,数字按一定规律递增
求nxn的Zigzag数组?
代码如下:
/* 0 1 5 6 14 15 27 28 2 4 7 13 16 26 29 42 3 8 12 17 25 30 41 43 9 11 18 24 31 40 44 53 10 19 23 32 39 45 52 54 20 22 33 38 46 51 55 60 21 34 37 47 50 56 59 61 35 36 48 49 57 58 62 63 */ class Zigzag{ public static void main(String[] args){ //int[][] a=nzigzag(8); int[][] a=zigzag2(8); print(a); } //解法一: public static int[][] nzigzag(int n){ int[][] a=new int[n][n]; int count=0; //记录当前应当填充的元素 int cross=0; //填充左上三角矩阵,包括对角线,按斜线输出,cross表示的是第几条斜线 //对于任意一个元素a[i][j],有i+j = cross for(cross=0;cross<n;cross++){ //如果填充第偶数条斜线,那么输出的方向是做左下角到右上角,终止的条件是行号i==0,或者列好j==N-1 if(cross%2==0){ for(int row=cross;row>=0;row--){ a[row][cross-row]=count++; } }else{ //如果填充第奇数数条斜线,那么输出的方向是做右上角到左下角 for(int col=cross;col>=0;col--){ a[cross-col][col]=count++; } } } //填充右下角矩阵,不包括对角线 int limit=1; //记录终止的行列号 for(cross=n-2;cross>=0;cross--){ if(cross%2==0){ for(int row=n-1;row>=limit;row--){ a[row][limit+n-1-row]=count++; } limit++; } else{ for(int col=n-1;col>=limit;col--){ a[limit+n-1-col][col]=count++; } limit++; } } return a; } //解法二: public static int[][] zigzag2(int n){ int value=http://www.mamicode.com/0;>
---EOF---
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。