顺时针打印

题目描述

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

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        int up,down,left,right;
        vector<int> result;
        int row = matrix.size();
        if(row == 0) return result;
        int col = matrix[0].size();
        up = left = 0;
        right = col-1;
        down = row -1;
        int sig = 1;
        //right = down = matrix.size()-1;
        while((up<=down)&&(left<=right)){
            if(sig ==1){
                for(int i = left;i<=right;i++){
                result.push_back(matrix[up][i]);
            }
            up++;
            sig=2;

            }else if(sig ==2){
                for(int j =up;j<=down;j++){
                result.push_back(matrix[j][right]);
            }
            right--;
            sig=3;

            }else if(sig ==3){
                for(int i = right;i>=left;i--){
                result.push_back(matrix[down][i]);
            }
            down--;
            sig=4;
            }else if (sig ==4){
                for(int j =down;j>=up;j--){
                result.push_back(matrix[j][left]);
            }
            left++;
            sig=1;
            }

        }
              if(up<=down){
                  if(sig==4){
                      for(int j = down;j>=up;j--){
                          result.push_back(matrix[j][left]);
                      }

                  }else if(sig ==2){
                      for(int j =up;j<=down;j++){
                            result.push_back(matrix[j][right]);
                      }

                  }
                if(left<=right){
                   if(sig ==1 ){
                      for(int i = left;i<=right;i++){
                          result.push_back(matrix[up][i]);
                            }
                   }else if(sig == 3){
                      for(int i = right;i>=left;i--){
                          result.push_back(matrix[down][i]);
                          }
                      }
                  }

              }
        return result;

    }
};
时间: 2024-11-08 19:06:52

顺时针打印的相关文章

顺时针打印矩阵

P128顺时针打印矩阵 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如:如果输入如下矩阵: 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 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>   #include<stdlib.h>   void printMatri

【 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 对于这个题.首先考虑打印结束的条件,然后考虑如何顺时针打印一圈. void printMatrixClockwisely(int **numbers,int columns,int rows) {   

顺时针打印矩阵-剑指Offer

顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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. 思路 整体是按着一圈一圈打印,需要找到循环继续的条件:columns > startX * 2并且rows > startY * 2 注意打印每圈的时候,四个边的打印循环起始条件 代码 import java.

剑指OFFER之顺时针打印矩阵(九度OJ1391)

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列. 接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1&l

剑指offer之【顺时针打印矩阵】

题目: 顺时针打印矩阵 链接: https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7

51. 顺时针打印矩阵[print matrix in clockwise direction]

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

【剑指offer】顺时针打印矩阵

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上测试通过. 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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. 输入: 输入可能包含多个测试样例,对于每个测试案例,

【笔试】37、顺时针打印矩阵

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

【ACM】顺时针打印矩阵

问题描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如,如果输入如下矩阵: 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. 算法描述: 以(x,y)元组作为当前打印元素的指针,当前位置加上-1,0,1分别 表示x,y坐标后退.保持不变和前进.如矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 若当前位置为(0,0

笔试算法题(26):顺时针打印矩阵 &amp; 求数组中数对差的最大值

出题: 输入一个数字矩阵,要求从外向里顺时针打印每一个数字: 分析: 从外向里打印矩阵有多重方法实现,但最重要的是构建合适的状态机,这样才能控制多重不同的操作: 注意有四种打印模式(左右,上下,右左,下上),所以需要一个index变量控制每次循环时执行的打印模式: 注意水平打印和垂直打印分别需要两个变量控制打印元素,并且两组变量中的两个端点都是相互靠近的(hs和he,vs和he),每执行一种打印模式之前,需要更新当前打印模式中打印方向的其实坐标,因为它已经在上一种打印模式中打印过: 每一种打印模