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重写运行结果:


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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值