【算法练习】数组操作

二维数组顺时针旋转

解决思路

  1. 创建新数组,将原数组的数据按照一定的顺序放入新数组中。
  2. 如果是顺时针的话,原数组中第一排的元素是应该放在新数组最后一列中的。

Java实现

java 复制代码
public class RotateOne {

    public static void main(String[] args) {
        int[][] A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int n = 3;
        int[][] B = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                B[j][n - 1 - i] = A[i][j];
            }
        }
        ArrayUtil.printArray(B);
    }
}

二维数组逆时针旋转

解决思路

  1. 逆时针的话,原数组第一排的元素放在新数组的第一列

Java实现

java 复制代码
public class RotateTwo {

    public static void main(String[] args) {
        int[][] A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int n = 3;
        int[][] B = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                B[n - 1 - j][i] = A[i][j];
                //A[0][0]-->B[2][0]
                //A[0][1]-->B[1][0]
            }
        }
        ArrayUtil.printArray(B);
    }
}

螺旋矩阵

https://leetcode.cn/problems/spiral-matrix/

解决思路

  1. 设定数组的边界,并且不断的更新边界值。
  2. 跳出循环的条件,当更新边界值不满足条件的时候,跳出循环。

Java实现

java 复制代码
class Solution_LC54_II {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        if (matrix.length == 0) {
            return res;
        }

        int top = 0, bottom = matrix.length - 1, left = 0, right = matrix[0].length - 1;
        while (true) {
            for (int i = left; i <= right; i++) {
                res.add(matrix[top][i]);
            }
            if (++top > bottom) {
                break;
            }
            for (int i = top; i <= bottom; i++) {
                res.add(matrix[i][right]);
            }
            if (--right < left) {
                break;
            }
            for (int i = right; i >= left; i--) {
                res.add(matrix[bottom][i]);
            }
            if (--bottom < top) {
                break;
            }
            for (int i = bottom; i >= top; i--) {
                res.add(matrix[i][left]);
            }
            if (++left > right) {
                break;
            }
        }
        return res;
    }
}
相关推荐
mm-q29152227292 小时前
【天野学院5期】 第5期易语言半内存辅助培训班,主讲游戏——手游:仙剑奇侠传4,端游:神魔大陆2
人工智能·算法·游戏
MoRanzhi12032 小时前
Python 实现:从数学模型到完整控制台版《2048》游戏
数据结构·python·算法·游戏·数学建模·矩阵·2048
2401_841495642 小时前
【数据结构】基于BF算法的树种病毒检测
java·数据结构·c++·python·算法·字符串·模式匹配
蒙奇D索大2 小时前
【算法】递归算法实战:汉诺塔问题详解与代码实现
c语言·考研·算法·面试·改行学it
一只鱼^_3 小时前
力扣第 474 场周赛
数据结构·算法·leetcode·贪心算法·逻辑回归·深度优先·启发式算法
叫我龙翔3 小时前
【数据结构】从零开始认识图论 --- 单源/多源最短路算法
数据结构·算法·图论
深圳佛手3 小时前
几种限流算法介绍和使用场景
网络·算法
陌路204 小时前
S14排序算法--基数排序
算法·排序算法
ysa0510304 小时前
虚拟位置映射(标签鸽
数据结构·c++·笔记·算法
Yue丶越4 小时前
【C语言】深入理解指针(二)
c语言·开发语言·数据结构·算法·排序算法