• 二维数组的转置


    首先我们默认=表示转置符号那么行列转置有;

    //[0][0]=[0][0]  //[0][1]=[1][0] //[0][2]=[2][0]
    //[1][0]=[0][1]  //[1][1]=[1][1] //[1][2]=[2][1]

     //[2][0]=[0][2]  //[2][1]=[1][2] //[2][2]=[2][2]

    1.我们观察到行列转置在表面上是行列交换

    2.但是我们发现,对角线是不用处理的所以有

    //[0][0]=[0][0]   //[1][1]=[1][1]  //[2][2]=[2][2]

    换成代码描述就是

    if(x==y) {
    continue;
    }
    

    2.再仔细观察我们发现

    //[0][1]=[1][0]  //[1][0]=[0][1]

    //[0][2]=[2][0]  //[2][0]=[0][2]

    //[1][2]=[2][1] //[2][1]=[1][2]

    发现存在重复置换导致最后没有效果

    所以考虑控制转置次数发现把行控制在2时就可以了,原因是最后一行每个元素都存在重复置换或者是不需要执行操作的元素

    所以完整代码如下:

    public class 数组转置 {
    
    	public static void main(String[] args) {
    		int[][] data=new int[][] {{1,2,3},{4,5,6},{7,8,9}};//三行三列的矩阵
    		System.out.println("转置前:");
    		print(data);
    		transfer(data);
    		System.out.println("转置后:");
    		print(data);
    	}
    	public static int[][] transfer(int[][] temp) {
    		for(int x=0;x<=temp.length/2;x++) {//行控制
    			for(int y=0;y<temp[x].length;y++) {//列控制
    				if(x==y) {
    					continue;
    				}
    				if(x==1&y==0) {
    					continue;
    				}
    				//行列转置
    				int tem=temp[x][y];        
    				temp[x][y]=temp[y][x];
    				temp[y][x]=tem;
    			}
    		}
    		return temp;
    		}
    			
    
    		public static void print(int[][] temp) {
    			for(int x=0;x<temp.length;x++) {//行控制
    				for(int y=0;y<temp[x].length;y++) {//列控制
    					System.out.print("["+temp[x][y]+"]"+" ");
    					
    				}
    				System.out.println();
    			}
    			
    		}
    }
    

      第二种思维

    //[0][0]=[0][0]  //[0][1]=[1][0] //[0][2]=[2][0]
    //[1][0]=[0][1]  //[1][1]=[1][1] //[1][2]=[2][1]

     //[2][0]=[0][2]  //[2][1]=[1][2] //[2][2]=[2][2]

    在对角线的一侧交换即可

    每一个都是从行列相等处开始执行

    public class 数组转置 {
    
    	public static void main(String[] args) {
    		int[][] data=new int[][] {{1,2,3},{4,5,6},{7,8,9}};//三行三列的矩阵
    		System.out.println("转置前:");
    		print(data);
    		transfer(data);
    		System.out.println("转置后:");
    		print(data);
    	}
    	public static int[][] transfer(int[][] temp) {
    		for(int x=0;x<temp.length;x++) {//行控制
    			for(int y=x;y<temp[x].length;y++) {//列控制
    				//行列转置
    				int tem=temp[x][y];        
    				temp[x][y]=temp[y][x];
    				temp[y][x]=tem;
    			}
    		}
    		return temp;
    		}
    			
    
    		public static void print(int[][] temp) {
    			for(int x=0;x<temp.length;x++) {//行控制
    				for(int y=0;y<temp[x].length;y++) {//列控制
    					System.out.print("["+temp[x][y]+"]"+" ");
    					
    				}
    				System.out.println();
    			}
    			
    		}
    }
    

      

  • 相关阅读:
    Maven下Flex国际化配置
    Adobe AIR and Flex
    jQuery: 刨根问底 attr and prop两个函数的区别
    HTML5[8]: 图文混排,图片与文字居中对齐
    HTML5[7]: 实现网页版的加载更多
    HTML5[6]:多行文本显示省略号
    HTML5[5]:在移动端禁用长按选中文本功能
    HTML5[4]:去除不必要的标签,完全使用css实现样式
    HTML5[3]:中文换行
    HTML5[2]:使用viewport控制手机浏览器布局
  • 原文地址:https://www.cnblogs.com/cainame/p/10319085.html
Copyright © 2020-2023  润新知