矩阵转置 知识点 + 经典题目(规则 + 不规则)

一、核心知识点
1. 规则矩阵转置(行列数固定
定义
原矩阵:a[i][j] 第i行第j列
转置矩阵:b[j][i] = a[i][j]
·行数 ↔ 列数互换
·适合:n 行 m 列固定二维数组
** 核心思路**
1.先存原二维数组
2.外层循环列,内层循环行
3.依次输出 a[行][列]

2. 不规则矩阵转置(每行长度不一样)
特点
各行元素个数不统一,短行缺少的位置直接跳过不输出

解题步骤
1.用 List<List> 动态存储所有行数据
2.遍历所有行,求出最长行长度(转置后的总行数)
3.外层遍历列下标,内层遍历所有原行
4.判断:当前行是否存在该列元素,存在则输出,不存在跳过

3. 通用转置口诀
原先行行遍历,转置列列遍历
正常遍历:行→列
转置遍历:列→行

二、Java 基础写法
1)规则矩阵转置(固定 n 行 m 列)
java

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(),m=sc.nextInt();
int[][] a=new int[n][m];
//录入
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
a[i][j]=sc.nextInt();
//转置输出 列在外 行在内
for(int j=0;j<m;j++){
for(int i=0;i<n;i++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}

2)不规则矩阵转置(考试常用)
java

import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
List<List> data=new ArrayList<>();
int max=0;
//读取每行
for(int i=0;i<n;i++){
List row=new ArrayList<>();
while(sc.hasNextInt()){
row.add(sc.nextInt());
if(sc.nextLine().equals(""))break;
}
max=Math.max(max,row.size());
data.add(row);
}
//按列输出转置
for(int col=0;col<max;col++){
for(List r:data){
if(col<r.size()) System.out.print(r.get(col)+" ");
}
System.out.println();
}
}
}

三、经典练习题(由易到难)
题 1 基础规则矩阵转置
题目
输入 2 行 3 列整数矩阵,输出转置后矩阵

输入:
plaintext
2 3
1 2 3
4 5 6

输出:
plaintext
1 4
2 5
3 6

题 2 不规则表格转置(必考)
题目
给定 n 行数据,每行数字个数任意,实现不规则转置,不足跳过
输入:
plaintext
4
1 3
2
5 6 7
8 9

输出:
plaintext
1 2 5 8
3 6 9
7

题 3 最小难度填空版转置
已知二维数组,直接打印转置
数组:{{1,2},{3,4},{5,6}}
输出:
plaintext
1 3 5
2 4 6

题 4 实战业务题
业务导出杂乱数据表,每行数据长度不等,要求:
1.读取所有行数据
2.进行表格转置
3.同一行转置后元素空格分隔,无元素直接换行

四、易错点总结
1.遍历顺序搞反
错:行在外列在内
对:列在外,行在内
2.不规则矩阵误用二维数组
数组长度固定存不下长短不一数据,必须用List集合
3.越界报错
不规则一定要加判断:列下标 < 当前行长度 再取值
4.多余空格
比赛可忽略末尾空格,评测一般不判错

posted on 2026-05-20 09:23  谢天佑  阅读(6)  评论(0)    收藏  举报