剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 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.

1 题目描述

  输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.

2 思路和方法

  直接定义一个矩形,在矩形的四条边取值,程序大大简化。

3 核心代码

 1 class Solution {
 2 public:
 3     vector<int> printMatrix(vector<vector<int> > matrix) {
 4         vector<int>vec;
 5         int row = matrix.size();
 6         int column = matrix[0].size();
 7         int left = 0, right = column, up = 0, bottom = row;
 8         while((up < bottom) && (left < right))
 9         {
10             for(int i = left; i < right; i++) vec.push_back(matrix[up][i]);
11             for(int i = up+1; i < bottom; i++) vec.push_back(matrix[i][right-1]);
12             for(int i = right-1-1; ((bottom-1)!=up)&&(i >=left); i--) vec.push_back(matrix[bottom-1][i]);
13             for(int i = bottom-1-1; ((right-1)!=left)&&(i >left); i--) vec.push_back(matrix[i][left]);
14             up++;left++; right--; bottom--;
15         }
16         return vec;
17     }
18 };

4 完整代码

 1 #include<iostream>
 2 #include<vector>
 3
 4 using namespace std;
 5
 6 //直接定义一个矩形,在矩形的四条边取值,程序大大简化
 7 class Solution{
 8 public:
 9     vector<int>printMatrix(vector<vector<int>>  matrix) {
10         vector<int>vec;
11         int row = matrix.size();
12         int column = matrix[0].size();
13         int left = 0, right = column, up = 0, bottom = row;
14         while ((up < bottom) && (left < right))
15         {
16             for (int i = left; i < right; i++) vec.push_back(matrix[up][i]);
17             for (int i = up + 1; i < bottom; i++) vec.push_back(matrix[i][right - 1]);
18             for (int i = right - 1 - 1; ((bottom - 1) != up) && (i >= left); i--) vec.push_back(matrix[bottom - 1][i]);
19             for (int i = bottom - 1 - 1; ((right - 1) != left) && (i >left); i--) vec.push_back(matrix[i][left]);
20             up++; left++; right--; bottom--;
21         }
22         return vec;
23     }
24 };
25
26 int main()
27
28 {
29     Solution a;
30     vector<vector<int>> matrix = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 } };//矩阵初始化
31     vector<int> m = a.printMatrix(matrix);
32     for (auto i : m)//依次打印返回矩阵的值
33         cout << i << " ";
34     cout << endl;
35
36     return 0;
37
38 }

参考资料

https://blog.csdn.net/hangsyt108/article/details/80949337

原文地址:https://www.cnblogs.com/wxwhnu/p/11410207.html

时间: 2025-01-02 16:40:06

剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 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.的相关文章

C++输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,

//输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, //例如,如果输入如下矩阵: 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. #include <iostream> using namespace std; void Grial(int (*a)[5],int n) { int a1 = 0; int b1 = n-1; bool visted[

剑指offer19

package jianzhiOffer; import java.util.ArrayList; import java.util.Arrays; /**  * 输入一个矩阵,按照从外向里以顺时针的顺序依  * 次打印出每一个数字,例如,如果输入如下矩阵:   * 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16   * 则依次打印出数字1,2,3,4,8,12,16,15,14,13,  * 9,5,6,7,11,10.  * @author user  * 思想,

剑指Offer19 包含min函数的栈

1 /************************************************************************* 2 > File Name: 19_MinInStack.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月30日 星期二 19时29分48秒 6 **************************************

剑指offer(五十三)之按之字形顺序打印二叉树

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 代码: <span style="color:#000099;">import java.util.ArrayList; import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = n

54. Spiral Matrix(剑指offer--19)

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. Example 1: Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5] Example 2: Input: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,

剑指offer第十三题:调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 自己用了额外空间实现函数: 1 import java.util.*; 2 public class Solution { 3 public void reOrderArray(int [] array) { 4 Stack<Integer> s = new Stack<Integer>(); 5 int l =

《剑指offer》:[42]翻转英文中单词顺序

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理. 对字符串的操作,主要问题:一定要注意字符串为NULL和访问越界的情况!再就是找'\0'. 例如输入字符串:"I love you.",经过翻转就变成:"you. love I".看出来了吗,故意的,(不论语法)呵呵! 方案一:两次翻转法.两次翻转法就是先对整个字符串进行翻转:".uoy evol I":第二次再翻转对句子中的单个单词进行

剑指offer-高质量的代码(调整数组顺序使得奇数位于偶数的前面)

题目:输入一个整数数组,实现一个函数中调整该数组中数字的顺序,使得所有的奇数位于数组的前半部,所有偶数位于数组的后半部. 思路:用两个指针p1和p2,分别指向数组的头和尾部,p1只向后移,p2只向前移.当满足p1<p2这个条件时,可以将p1向后移并找到第一偶数为止,p2向前移直到找到第一个奇数为止,此时如果还满足p1<p2的条件,则交换p1和p2的值. c++代码:本代码扩展性的体现为:将函数bool (*func) (int)当做参数传人preorder中,而此时要判断数字的奇偶性,可以写一

剑指offer-数值的整数次方-调整数组顺序使奇数位于偶数前面-代码的完整性-python

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 思路 求base的exponent次方,exponent有两种可能性, exponent>0 for循环exponent次,结果与base相乘 exponent<0 for循环exponent次,结果与base相除 输出结果: # -*- coding:utf-8 -*- class Solution: def Power(self