zoukankan      html  css  js  c++  java
  • 剑指offer--面试题20

    题目:从外向里顺时针打印矩阵

    做题心得:该题本质上并未考查复杂的数据结构及算法,而是考查了快速找规律的能力!!!

         要想作出此题,必须先有绝对清晰的思路,否则越写越乱(因为涉及到很多的循环打印)

    自己当时的思路基本符合作者提供的思路:

         先考虑怎么打印一圈(四个循环),再考虑如何结束打印(和作者的意图不太一样,自己想通过打印数<=rows*columns来决定,作者的思路比较难想!)

    但真正去写还是很困难。。。

    参考代码如下:

    #include "stdafx.h"
    
    void PrintMatrixInCircle(int** numbers, int columns, int rows, int start);
    void printNumber(int number);
    
    void PrintMatrixClockwisely(int** numbers, int columns, int rows)
    {
        if(numbers == NULL || columns <= 0 || rows <= 0)
            return;
    
        int start = 0;
    
        while(columns > start * 2 && rows > start * 2)
        {
            PrintMatrixInCircle(numbers, columns, rows, start);
    
            ++start;
        }
    }
    
    void PrintMatrixInCircle(int** numbers, int columns, int rows, int start)
    {
        int endX = columns - 1 - start;
        int endY = rows - 1 - start;
    
        // 从左到右打印一行
        for(int i = start; i <= endX; ++i)
        {
            int number = numbers[start][i];
            printNumber(number);
        }
    
        // 从上到下打印一列
        if(start < endY)
        {
            for(int i = start + 1; i <= endY; ++i)
            {
                int number = numbers[i][endX];
                printNumber(number);
            }
        }
    
        // 从右到左打印一行
        if(start < endX && start < endY)
        {
            for(int i = endX - 1; i >= start; --i)
            {
                int number = numbers[endY][i];
                printNumber(number);
            }
        }
    
        // 从下到上打印一列
        if(start < endX && start < endY - 1)
        {
            for(int i = endY - 1; i >= start + 1; --i)
            {
                int number = numbers[i][start];
                printNumber(number);
            }
        }
    }
    
    void printNumber(int number)
    {
        printf("%d	", number);
    }
    清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
  • 相关阅读:
    两角和的正切
    积化和差与和差化积
    require.js的简单使用
    HTML、css、javascript、DOM编程
    SignalR长连接的简单用法
    【ESP8266】发送HTTP请求
    记录自己的第一篇博客
    1 为什么搭建.Net core下的云开发框架
    C#线程中LOCK的意义
    ping命令执行过程详解
  • 原文地址:https://www.cnblogs.com/hello-yz/p/3256134.html
Copyright © 2011-2022 走看看