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);
    }
    清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
  • 相关阅读:
    jQuery学习笔记3--网页字体变大变小
    jQuery学习笔记2--表格内容筛选
    jQuery学习笔记1--表格展开关系
    (转)PhoneGap开发环境搭建
    对HTML+CSS+JavaScript的个人理解
    (转)经典收藏 50个jQuery Mobile开发技巧集萃
    (转)phoneGap-Android开发环境搭建
    (转)面向移动设备的HTML5开发框架
    (转)前端攻略系列(二)
    (转)常见浏览器兼容性问题与解决技巧
  • 原文地址:https://www.cnblogs.com/hello-yz/p/3256134.html
Copyright © 2011-2022 走看看