要求半个小时内写出可完整运行的代码。
这个是美团的一个小题,半个小时做出来。水平不加,花了一个小时,可能也不能和大牛比,只是自己记载吧。
代码如下:public class Erweisuzuixueduixian { /* * 1,二维数组(N*N),沿对角线方向,从右上角打印到左下角如N=4: * 4*4二维数组 * { 1 2 3 4 } 04 03 02 01 10 20 30 40 { 5 6 7 8 } { 9 10 11 12 } {13 14 15 16 } 4 3 8 2 7 12 1 6 11 16 5 10 15 9 14 13 */ public static void main(String[] args) { printErweisuzuByN(5); } private static void printErweisuzuByN(int num) { int[][] arrs=new int [num][num]; arrscreateArrays(arrs,num); //加载数据 ToShowPrintArrs(arrs); } private static void ToShowPrintArrs(int[][] arrs) { //当前的数据 0 4 15 //n+n-1 int length=arrs.length; //-12 //03 02 01 00 10 20 30 // 13 12 11 // 23 22 // 33 for(int z=length-1;0-length-1<z;z--){//笔记本问题,大于号打不出来,代码质量请见谅 这是贴近现实的代码实现 //算xy坐标 int y=z; int x=0; if(z<0){ y=0;//X轴坐标 x=0-z; } for(int t=0;t<=length-x-y-1;t++){//根据X轴y轴 和 length关系 不用些过滤 System.out.print(arrs[x+t][y+t]+" ");// } System.out.println(); } } private static void arrscreateArrays(int[][] arrs,int num) { int tranNum=1; for(int z=1;z<=num;z++){ int tranVal=tranNum+arrs.length-1; int[] tranNums=new int[num]; for(int t=tranNum;t<=tranVal;t++){ tranNums[t-tranNum]=t; if(t==tranVal){ tranNum=t+1; } } arrs[z-1]=tranNums; } } }
以上就是这道题,我的答案!下面是一位大牛写的,膜拜下!
http://bylijinnan.iteye.com/blog/2056301