鱼C论坛

 找回密码
 立即注册
查看: 2240|回复: 1

[技术交流] C++刷leetcode(面试题29. 顺时针打印矩阵)【边界】

[复制链接]
发表于 2020-3-31 19:33:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 糖逗 于 2020-5-8 18:07 编辑

题目描述:
  1. 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

  2.  

  3. 示例 1:

  4. 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
  5. 输出:[1,2,3,6,9,8,7,4,5]
  6. 示例 2:

  7. 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
  8. 输出:[1,2,3,4,8,12,11,10,9,5,6,7]
  9.  

  10. 限制:

  11. 0 <= matrix.length <= 100
  12. 0 <= matrix[i].length&#160;<= 100

  13. 来源:力扣(LeetCode)
  14. 链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
  15. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

  1. #include <vector>
  2. #include <iostream>

  3. using namespace std;


  4. vector<int> solution(vector<vector<int> >& matrix){
  5.         vector<int> res;
  6.         if(matrix.size() == 0 || matrix[0].size() == 0) return res;
  7.         int top = 0;
  8.         int bottom = matrix.size() - 1;
  9.         int left = 0;
  10.         int right = matrix[0].size() - 1;
  11.         while(true){
  12.                 for(int i = left; i <= right; i++){
  13.                         res.push_back(matrix[top][i]);
  14.                 }
  15.                 top++;
  16.                 if(top > bottom) break;
  17.                 for(int i = top; i <= bottom; i++){
  18.                         res.push_back(matrix[i][right]);
  19.                 }
  20.                 right--;
  21.                 if(right < left) break;
  22.                 for(int i = right; i >= left; i--){
  23.                         res.push_back(matrix[bottom][i]);
  24.                 }
  25.                 bottom--;
  26.                 if(bottom < top) break;
  27.                 for(int i = bottom; i >= top; i--){
  28.                         res.push_back(matrix[i][left]);
  29.                 }
  30.                 left++;
  31.                 if(left > right) break;
  32.                
  33.         }
  34.        
  35.        
  36.         return res;
  37.        
  38. }

  39. int main(void){
  40.         int row;
  41.         vector<vector<int> > input;
  42.         cout << "please send row" << endl;
  43.         cin >> row;
  44.         input.resize(row);
  45.        
  46.         int columns;
  47.         cout << "please send columns" << endl;
  48.         cin >> columns;
  49.        
  50.         int number;
  51.         for(int i = 0; i < row; i++){
  52.                 for(int j = 0; j < columns; j++){
  53.                         cin >> number;
  54.                         input[i].push_back(number);
  55.                        
  56.                 }
  57.         }
  58.        
  59.         vector<int> res = solution(input);
  60.         for(int i = 0; i < res.size(); i++){
  61.                 cout <<  res[i];
  62.         }
  63.         cout << endl;
  64.        
  65.         return 0;
  66. }
复制代码


注意事项:
1.考察边界问题。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-31 23:47:32 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 02:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表