牛客(1)

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

思路:主要关注4个角,根据是哪个角,在做出相应的操作。

代码如下:

 1 class Solution {
 2 public:
 3     vector<int> printMatrix(vector<vector<int> > matrix) {
 4       vector<int> results;
 5         if (matrix.size() == 0) {
 6             return results;
 7         }
 8
 9         int x = 0;
10         int y = 0; //当前元素的位置
11
12         int xf = 0;
13         int yf = 1;//xf和yf表示当前元素位置指针的方向,-1表后退,0停止,1前进
14
15         int rows = matrix.size()-1;        //行
16         int cols = matrix.at(0).size()-1; //列
17         //当只有一行时
18         if (rows == 0) {
19             for (int i = 0; i <= cols; i++) {
20                 results.push_back(matrix.at(0).at(i));
21             }
22             return results;
23         }
24         //当只有一列时
25         if (cols == 0) {
26             for (int i = 0; i <= rows; i++) {
27                 results.push_back(matrix.at(i).at(0));
28             }
29             return results;
30         }
31
32         int x_start = 0;
33         int y_start = 0;
34
35         int x_end = rows;
36         int y_end = cols;
37
38         bool isFirst = true;
39
40         int size = (rows+1)*(cols+1);    //元素个数
41         while (results.size() < size) {
42             results.push_back(matrix[x][y]);    //记录当前元素
43             x += xf;                            //横坐标变换
44             y += yf;                            //纵坐标变化
45             //开始进行四个角的判断以及相关操作
46             if (x == x_start && y == y_end) {
47                 xf = 1;
48                 yf = 0;
49                 if (!isFirst) {
50                     y_start += 1;
51                 }
52             }
53             if (x == x_end && y == y_end) {
54                 xf = 0;
55                 yf = -1;
56                 y_end -= 1;
57
58
59             }
60             if (x == x_end && y == y_start) {
61                 xf = -1;
62                 yf = 0;
63                 x_start += 1;
64
65             }
66             if (x == x_start && y == y_start) {
67                 xf = 0;
68                 yf = 1;
69                 x_end -= 1;
70                 isFirst = false;
71             }
72         }
73         return results;
74 }
75 };
时间: 2024-08-01 12:06:38

牛客(1)的相关文章

牛客网华为机试训练第3题 明明的随机数

今天花了一下午才把明明的随机数这个搞明白,期间和牛客网的编译器殊死搏斗.一直发现在本地编译器运行成功,但是在牛客上的老师不能通过.整的十分的恼火和焦躁.后来看到了相同的问题,才发现解决之道. 时间限制:1秒 空间限制:32768K 热度指数:222608 本题知识点: 数组 算法知识视频讲解 题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不

C++中求数组连续子向量的最大和(牛客剑指offer)

/////////////////////////////////////////////////////////////////// //HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学. //今天测试组开完会后,他又发话了:在古老的一维模式识别中, //常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决. //但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢? //例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开

牛客网在线判题系统JavaScript(V8)使用

JavaScript作为一种弱类型的编程语言,语法和C/C++.JAVA等存在差别,但是对于大部算法题,不只是C/C++.JAVA,也依然可以使用JavaScript来实现.所以在牛客网中,如果你喜欢JavaScript这门编程语言,同时对数据结构与算法感兴趣,当然可以使用这门语言去刷编程题. 大家有没有跟我碰到过和我类似的情况,在牛客网刷编程题的时候,编译器提供的是Javascript(v8 6.0.0),在线编程部分前端编程还好,只用在题目给出的函数中补充就行.但苦恼的是,我们不知道如何像C

牛客网-求和

题目描述 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来 输入描述: 每个测试输入包含2个整数,n和m 输出描述: 按每个组合的字典序排列输出,每行输出一种组合 示例1 输入 5 5 输出 1 4 2 3 5 #include<iostream> #include<string> #include<vector> #include<algorithm> using namespac

牛客赛马网笔试攻略

牛客网: 1. 单行输入: while(line=readline()){ var lines = line.split(' '); var a = parseInt(lines[0]); var b = parseInt(lines[1]); print(a+b); } 2. 两行输入,单行输出: var n; while(n=parseInt(readline())){ var marr = readline().split(' '); print(fun(marr, n)); } func

网易2017秋招编程题集合-牛客网

网易2017秋招编程题集合-牛客网 链接:https://www.nowcoder.com/questionTerminal/0147cbd790724bc9ae0b779aaf7c5b50来源:牛客网 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如: {1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列. 现在给出一个数字序列,允许使用一

【华为机试】找最高分(通过此题熟悉牛客网Node输入输出)

来源:牛客网 老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括多组测试数据.每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目.学生ID编号从1编到N.第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩接下来又M行,每一行有一个字符C(只取'Q'或'U'),和两个正整数A,B,当C为'Q'的时候

牛客网——前端大挑战

1.封装函数 f,使 f 的 this 指向指定的对象 1 function bindThis(f, oTarget) { 2 return f.bind(oTarget); 3 } 2.获取 url 中的参数 1). 指定参数名称,返回该参数的值 或者 空字符串 2). 不指定参数名称,返回全部的参数对象 或者 {} 3). 如果存在多个同名参数,则返回数组 输入 http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe输出 [1

好未来2017秋招笔试真题二 --牛客网

好未来2017秋招笔试真题二 --牛客网 链接:https://www.nowcoder.com/questionTerminal/ee5de2e7c45a46a090c1ced2fdc62355来源:牛客网 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100 输出描述: 依次输出倒置之后的字符串,以空格分割 输入例子: I

网易2017秋招编程题集合_以下代码全部来自牛客网

如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列.现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和).现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列. 链接:https://ww