LeetCode 756. 蛇形矩阵

2024-05-01 06:04
文章标签 leetcode 矩阵 蛇形 756

本文主要是介绍LeetCode 756. 蛇形矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

输入两个整数 n n n m m m,输出一个 n n n m m m列的矩阵,将数字 1 1 1 n × m n×m n×m按照回字蛇形填充至矩阵中。

具体矩阵形式可参考样例。

输入格式
输入共一行,包含两个整数 n n n m m m

输出格式
输出满足要求的矩阵。

矩阵占 n n n行,每行包含 m m m个空格隔开的整数。

数据范围
1 ≤ n , m ≤ 100 1≤n,m≤100 1n,m100
输入样例:

3 3

输出样例:

1 2 3
8 9 4
7 6 5

思路
这题之前好像见过,怎么搞的忘了
网上大佬思路:

代码

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[][] M = new int[100][100];int[][] d = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int l = -1, r = m, h = -1, b = n;int cnt = 0;for(int k = 1, i = 0, j = 0; k <= n * m; ){int ni = i + d[cnt][0], nj = j + d[cnt][1];if(nj == r) h ++;else if(ni == b) r --;else if(nj == l) b --;else if(ni == h) l ++;else{M[i][j] = k;k++;i = ni;j = nj;continue;}cnt = (cnt + 1) % 4;}for(int i = 0; i < n; i ++){for(int j = 0; j < m; j++){if(j != 0) System.out.print(" ");System.out.print(M[i][j]);}System.out.println();}}
}

y总代码

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[][] res = new int[n][m];int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};int x = 0, y = 0, d = 1;for (int i = 1; i <= n * m; i ++ ) {res[x][y] = i;int a = x + dx[d], b = y + dy[d];if (a < 0 || a >= n || b < 0 || b >= m || res[a][b] > 0) {d = (d + 1) % 4;a = x + dx[d];b = y + dy[d];}x = a;y = b;}for (int i = 0; i < n; i ++ ) {for (int j = 0; j < m; j ++ )System.out.printf("%d ", res[i][j]);System.out.println();}}
}

这篇关于LeetCode 756. 蛇形矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950882

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

LeetCode:64. 最大正方形 动态规划 时间复杂度O(nm)

64. 最大正方形 题目链接 题目描述 给定一个由 0 和 1 组成的二维矩阵,找出只包含 1 的最大正方形,并返回其面积。 示例1: 输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4 示例2: 输入: 0 1 1 0 01 1 1 1 11 1 1 1 11 1 1 1 1输出: 9 解题思路 这道题的思路是使用动态规划