《剑指offer》第四题:替换空格
Posted zsy-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《剑指offer》第四题:替换空格相关的知识,希望对你有一定的参考价值。
// 面试题29:顺时针打印矩阵 // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 #include <cstdio> void PrintMatrixInCircle(int** numbers, int columns, int rows, int start); void printNumber(int number); void PrintMatrixClockwisely(int** numbers, int columns, int rows) { if (numbers == nullptr || 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 < endY - 1 && start < endX - 1) { for (int i = endY - 1; i > start; --i) { int number = numbers[i][start]; printNumber(number); } } } void printNumber(int number) { printf("%d ", number); }
// ====================测试代码==================== void Test(int columns, int rows) { printf("Test Begin: %d columns, %d rows. ", columns, rows); if (columns < 1 || rows < 1) return; int** numbers = new int* [rows]; for (int i = 0; i < rows; ++i) { numbers[i] = new int[columns]; for (int j = 0; j < columns; ++j) { numbers[i][j] = i * columns + j + 1; } } PrintMatrixClockwisely(numbers, columns, rows); printf(" "); for (int i = 0; i < rows; ++i) delete[](int*)numbers[i]; delete[] numbers; } int main(int argc, char* argv[]) { /* 1 */ Test(1, 1); /* 1 2 3 4 */ Test(2, 2); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */ Test(4, 4); /* 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 */ Test(5, 5); /* 1 2 3 4 5 */ Test(1, 5); /* 1 2 3 4 5 6 7 8 9 10 */ Test(2, 5); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ Test(3, 5); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 */ Test(4, 5); /* 1 2 3 4 5 */ Test(5, 1); /* 1 2 3 4 5 6 7 8 9 10 */ Test(5, 2); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ Test(5, 3); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 */ Test(5, 4); return 0; }
分析:画图举例很方便,可以直观的算出各种条件。
以上是关于《剑指offer》第四题:替换空格的主要内容,如果未能解决你的问题,请参考以下文章
乱序版 ● 剑指offer每日算法题打卡题解—— 字符串和链表(题号5,24,35,58)
代码随想录算法训练营第8天 | ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串