Z字形编排问题

  上个月的某次CSDN线上活动,左飞老师结缘了我一本《算法之美——隐匿在数据结构背后的原理(C++版)》,我决定把这本大作里的22个经典问题都用Java重写一遍,于是有了本系列博客。尽管用Java重写《算法之美》对Android学习直接帮助不大,但对基本功提升很大,会有长远效果。本系列博客以代码为主,讲解为辅。讲解只涉及Java与C++的不同之处(指针和C++的自带工具类),算法以《算法之美》为准。


  “Z字形编排问题”的Java重写思路:该问题涉及的主要知识点为二维数组,这个知识点Java和C++几乎没有不同之处,我要说的和《算法之美》一样。


  “Z字形编排问题”的Java重写代码:

<span style="font-size:18px;">public class ZMatrix {
	public static void main(String[] args) {
	    System.out.println("Hello Mr.Zuo!");//向左老师致敬
	    
	    final int SIZE = 8;//SIZE可以为任意偶数
	    
	    int[][] matrix = new int[SIZE][SIZE];
	    int[][] a = new int[SIZE][SIZE];
	    
	    System.out.println("原始矩阵如下:");
	    int p = 0;
	    for(int i = 0;i < SIZE ; i++){
	    	String str = "";
	    	for(int j = 0;j < SIZE ; j++){
	    		matrix[i][j]=p;
	    		str += ( (matrix[i][j]<10?("0"+matrix[i][j]):matrix[i][j]) + " ");
	    		p++;
	    	}
	    	System.out.println(str);
	    }
	    
	    System.out.println("经过Z字型编排后的矩阵如下:");
	    int i=0,j=0;
	    for(int x = 0; x < SIZE ;x++){
	    	for(int y =0; y < SIZE ;y++){
	    		a[i][j] = matrix[x][y];
	    		
	    		if((i == SIZE-1 || i==0) && j%2==0 ){
	    			j++;
	    			continue;
	    		}
	    		
	    		if((j == 0 || j == SIZE - 1) && i%2==1 ){
	    			i++;
	    			continue;
	    		}
	    		
	    		if((i+j)%2 == 0){
	    			i--;
	    			j++;
	    		}else if((i+j)%2 == 1){
	    			i++;
	    			j--;
	    		}
	    	}
	    }
	    
	    for(int x = 0;x < SIZE ; x++){
	    	String str = "";
	    	for(int y = 0;y < SIZE ; y++){
	    		str += ( (a[x][y]<10?("0"+a[x][y]):a[x][y]) + " ");
	    	}
	    	System.out.println(str);
	    }
	    
	    }
}</span>

  “Z字形编排问题”的Java重写运行结果:

《Z字形编排问题》

  最后吐槽一下遇到的几个困难:Android Studio不能编译J2SE Project,而且eclipse没有代码自动补全功能(换句话说就是不能用“首字母+Enter”),最可恨的是习惯用Log我又要用Android不建议的但是Java自带的System.out.println(“CSDN”);把文字输出到控制台上。

    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/dongfeng9ge/article/details/51394416
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞