算法练习题(六)——Z字型打印矩阵

简介: 算法练习题(六)——Z字型打印矩阵

/**
 *  Z字型打印矩阵
 *  1 2 3 4
 *  5 6 7 8
 *  9 10  11  12
 *  13  14  15  16
 *
 *  1 2 5 9 6 3 4 7 10  13  14  11  8 12  15  16
 */
public class TwoArraysTest03 {
    public static void main(String[] args) {
        TwoArraysTest03 twoArraysTest03 = new TwoArraysTest03();
        int [][]matrix = new int[4][4];
        int temp = 0 ;
        for (int[] ints : matrix) {
            for (int i = 0; i < ints.length; i++) {
                ints[i] = temp+1;
                temp++;
            }
        }
        twoArraysTest03.zPlainMatrix(matrix);
    }
    public void zPlainMatrix(int [] [] matrix){
        int row = 0,rowMax = matrix.length;
        int col = 0,colMax = matrix[0].length;
//        若为true 就从左下向右上打印(走上坡),反正右上向左下打印(走下坡)
        boolean liftToRight = true;
        while (row < rowMax && col <colMax){
//          走上坡
//            结果两种情况  第一种:这波上坡走完的时候的第一行 
//                          ----右走一步 col++;
//                     另一种:这波上坡走完的时候在最后一列
//                          ----下走一步 row++;
            if (liftToRight){
                System.out.print(matrix[row][col]+"\t");
//                第一种
                if (row == 0 && col < colMax-1){
//                  右走一步 便于下一波的下坡
                    col++;
//                  方向切换
                    liftToRight = false;
                    continue;
//                第二种
                }else if (row > 0 && col == colMax-1){
//                  下走一步
                    row++;
//                  切换方向
                    liftToRight = false;
                    continue;
//                走上坡的路上
                }else {
                    row--;
                    col++;
                }
//          走下坡
//             结果两种情况
//                  第一种:这波下坡走完在第一列
//                       ----下走一步 row++;
//                  第二种:这波下坡走完在最后一行
//                       ----右走一步 col++;
            }else {
                System.out.print(matrix[row][col]+"\t");
//                第一种
                if (col == 0 && row < rowMax-1){
                    row++;
                    liftToRight = true;
                    continue;
//                第二种
                }else if ( row == rowMax-1){
                    col++;
                    liftToRight = true;
                    continue;
//                在走下坡的路上
                }else {
                    row++;
                    col--;
                }
            }
        }
    }
}
相关文章
|
6月前
|
算法 测试技术 C++
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-48 算法训练 关联矩阵
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-48 算法训练 关联矩阵
61 0
|
6月前
|
算法 测试技术 C#
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
|
5天前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
20天前
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
16 4
|
18天前
|
存储 算法
动态规划算法学习一:DP的重要知识点、矩阵连乘算法
这篇文章是关于动态规划算法中矩阵连乘问题的详解,包括问题描述、最优子结构、重叠子问题、递归方法、备忘录方法和动态规划算法设计的步骤。
70 0
|
3月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
49 6
|
5月前
|
机器学习/深度学习 数据采集 人工智能
算法金 | 协方差、方差、标准差、协方差矩阵
**摘要:** 本文介绍了统计学中的基础概念,包括方差、标准差、协方差及其矩阵。方差衡量数据的分散程度,标准差是方差的平方根,提供相同单位下的波动度量。协方差则分析两个变量的关联性,正负值表示正负相关。协方差矩阵扩展到多变量情况,展示多个变量间的关系。这些工具在金融、质量控制、机器学习等领域有广泛应用。文章通过实例和公式清晰解释了每个概念,并强调理解它们之间的关系对于数据分析和统计建模的重要性。
59 0
算法金 | 协方差、方差、标准差、协方差矩阵
|
6月前
|
算法 测试技术 编译器
【算法 | 实验18】在字符矩阵中查找给定字符串的所有匹配项
题目描述 题目 在字符矩阵中查找给定字符串的所有匹配项 给定一个M×N字符矩阵,以及一个字符串S,找到在矩阵中所有可能的连续字符组成的S的次数。所谓的连续字符,是指一个字符可以和位于其上下左右,左上左下,右上右下8个方向的字符组成字符串。用回溯法求解。
87 1
|
5月前
|
算法
数据结构和算法学习记录——时间复杂度、空间复杂度相关练习题
数据结构和算法学习记录——时间复杂度、空间复杂度相关练习题
34 2