最近一直在忙项目,都没有时间准备下个学期的校招,虽然已经有一些小公司主动招我去上班,但我还是想要去大公司里面看看,亲眼见识下那些业界牛人到底是怎样的。所以,也正计划开始做些面试题,打好基础。

基础薄弱是我的弱点,我都是做啥学啥,没有专门研究一个东西,像是搞过蓝牙和USB通信这些需要与硬件打交道的东西,也搞过数据库的设计,搞过微信公共账号,搞过网站,搞过android应用开发...等等,但都没一样是特别厉害的,相反,我总觉得自己好弱啊!!

面试是需要准备的,哪怕我们自认自己很牛逼,但一些平时没有用到的东西,像是计算机组成原理,计算机网络的基础知识,就会把我们弄懵了。

这些只要背就行了,但一些笔试和面试题目就需要训练了,毕竟算法或者数值类的题目我们平时根本就不会用到!

今天这道题是跟矩阵有关的:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,如:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

输出如下:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10

实现的要点非常简单,就是在遍历元素的时候改变方向而已,一共需要四次:从左到右,从上到下,从右到左,从下到上。当然,方向的改变次数会随着数据的多少而发生变化,但这些都不是问题,只要设置好遍历的上下限就可以。

首先是要得到一个矩阵:

public static int[][] getMatrix(int dimension) {int[][] matrix = new int[dimension][dimension];int offset = 1;System.out.println("矩阵:");for (int i = 0; i < dimension; i++) {for (int j = 0; j < dimension; j++) {matrix[i][j] = j + offset;if (matrix[i][j] % dimension == 0) {System.out.println(matrix[i][j] + " ");} else {System.out.print(matrix[i][j] + " ");}}offset += dimension;}return matrix;}

对于矩阵而言,如果是从1开始,那么每行末尾的元素都是维度的倍数。
        这是5维矩阵的输出结果:

矩阵:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

接着我们就是顺时针打印该矩阵了:

public static void handleValue(int num, int len) {for (int i = num; i < len; i++) {if (list.indexOf(matrix[row][i]) == -1) {list.add(matrix[row][i]);conlum++;}}for (int i = num + 1; i < conlum; i++) {if (list.indexOf(matrix[i][conlum - 1]) == -1) {list.add(matrix[i][conlum - 1]);row++;}}for (int i = len - num - 1; i > 0; i--) {if (list.indexOf(matrix[row][i - 1]) == -1) {list.add(matrix[row][i - 1]);conlum--;}}for (int i = len - num - 2; i > 0; i--) {if (list.indexOf(matrix[i][conlum - 1]) == -1) {list.add(matrix[i][conlum - 1]);row--;}}}public static void handleMatrix(int[][] matrix) {int len = matrix.length;for (int i = 0; i < Math.round(len / 2 + 1); i++) {handleValue(i, len);}}

实现的基本原理就是这样:假设四次不同方向改变为一圈,那么需要找出一个矩阵大概的圈数,然后一圈一圈的处理该矩阵。每次方向改变的时候,只要记住是行还是列发生改变就行。为了防止添加重复的元素,我们增加了一个检查,当然可以实现不添加重复的元素。

打印的结果如:

结果:
1 2 3 4 5 10 15 20 25 24 23 22 21 16 11 6 7 8 9 14 19 18 17 12 13

我们可以继续测试:

matrix = getMatrix(10);

看看10维的矩阵结果如何:
矩阵:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
结果:
1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 99 98 97 96 95 94 93 92 91 81 71 61 51 41 31 21 11 12 13 14 15 16 17 18 19 29 39 49 59 69 79 89 88 87 86 85 84 83 82 72 62 52 42 32 22 23 24 25 26 27 28 38 48 58 68 78 77 76 75 74 73 63 53 43 33 34 35 36 37 47 57 67 66 65 64 54 44 45 46 56 55

这道题目还是非常简单的,一两分钟内就能做出来,只要知道它的重点是在哪里就行。

转载于:https://www.cnblogs.com/wenjiang/p/3208263.html

面试常备题(三)----顺时针打印矩阵相关推荐

  1. java程序输出矩阵_java编程题之顺时针打印矩阵

    本文实例为大家分享了java顺时针打印矩阵的具体代码,供大家参考,具体内容如下 import java.util.ArrayList; /** * * 剑指offer编程题(JAVA实现)--第19题 ...

  2. 程序员面试题精选100题(51)-顺时针打印矩阵

    // 程序员面试题精选100题(51)-顺时针打印矩阵.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <iostre ...

  3. 程序员面试题精选100题(51)-顺时针打印矩阵[算法]

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 例如:如果输入如下矩阵: 1              2              3              4 5     ...

  4. 剑指offer_第19题_顺时针打印矩阵_Python

    题目描述 输入一个矩阵 按照从外向里以顺时针的顺序依次打印出每一个数字 例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  5. 编程题:顺时针打印矩阵(不一定是方阵)

    思路:先按水平中线翻转,再按主对角线翻转 def rotate(matrix):m, n = len(matrix), len(matrix[0])dp = [[0] * m for _ in ran ...

  6. 【算法刷题日记之本手篇】左右最值最大差与顺时针打印矩阵

    ⭐️前面的话⭐️ 本篇文章介绍来自牛客试题广场的两道题题解,分别为[左右最值最大差]和[顺时针打印矩阵],展示语言java. 小贴士:本专栏所有题目来自牛客->面试刷题必用工具

  7. 顺时针打印矩阵(编程题讲解)

    顺时针打印矩阵 题目描述 题目分析 python代码 使用python矩阵的旋转 矩阵的转置代码 python旋转矩阵解法代码    <剑指offer> 编程题讲解. 题目描述    输入 ...

  8. php 顺时针打印矩阵,这题

    浅谈狄利克雷相关题目套路2021-03-25 21:58:20 啥都不知道,被yyc D爆了/kk 扔道题 P2714 四元组统计 乍一看,就想推式子,结果发现自己是个憨批 莫反就两条式子 考虑第二种 ...

  9. 【剑指offer-Java版】20顺时针打印矩阵

    顺时针打印矩阵:重在理解,毕竟作者分析的那个方法看起来还是蛮复杂的-所以自己写了个接地气的方法 重在逻辑的一个题,一次性完全写对还是比较困难的 public class _Q20 {public vo ...

最新文章

  1. 剑指offer python版 找出数组中重复的数字
  2. 小白学python买什么书-0基础小白学python有没有什么书可以推荐的?
  3. do msgbox loop_【连载1】DDC模块 DO点与强电电气柜的接口形式
  4. Annihilate(SA)
  5. mysql实验学生表_数据库实验(学生信息表)
  6. 写出gradle风格的groovy代码
  7. arcgis选出点规定范围的面
  8. 开课吧Java:微服务设计遵循的规约有哪些?
  9. Ruby之旅(16) 异常处理 rescue与ensure
  10. 浮点数例外 (核心已转储)_年仅21岁出场过百重新定义边后卫,克洛普把阿诺德打造成进攻核心...
  11. java必学的技术,终于有人把Java程序员必学知识点整理出来了,令人有如醍醐灌顶...
  12. SharePoint REST API - 使用REST接口对列表设置自定义权限
  13. .htaccess详解及.htaccess参数说明
  14. 125K非接触IC卡读卡头
  15. rocketmq 消息删除_RocketMq Topic创建和删除
  16. 随笔-关系抽取(三) — Dependency-based Models
  17. 转载的ctf练习链接
  18. Drools记录之DRL规则语言
  19. Air Jordan 33 Performance Review
  20. IDEA debug 断点无效

热门文章

  1. 告诉你我身边很多的聪明人,怎样利用科技产品挣钱
  2. 有些新手小白创业者开奶茶店,为什么总是容易上当受骗呢?
  3. 程序员未来会成为非常内卷式的职业吗?
  4. 数据库创建存储过程_创建存储过程来修复孤立的数据库用户
  5. Sports Nutrition
  6. SQLServer通过链接服务器调用Oracle 存储过程
  7. 计算机网络学习socket--day3
  8. 用信号量进程同步与互斥
  9. 第一个自动化运维程序
  10. 构造方法是静态还是非静态?