给定一整数 n 产生一个 1 到 n*n的螺旋形数组
2017-10-28 10:00
134 查看
本题源自LeetCode
------------------------------------------
例如,
假设n = 3,您应该返回以下矩阵:
[
[1,2,3]
[8,9,4]
[7,6,5]
]
思路:
即从四个方向构造数组
延伸 打印螺旋数组
代码:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
int rows=matrix.size();
int cols=0;
if(rows){
cols=matrix[0].size();
}
vector<int> result;
int rowStart=0;
int rowEnd=rows-1;
int colStart=0;
int colEnd=cols-1;
int count=0;
while(count<cols*rows){
//从左到右
for(int i=colStart;i<=colEnd;i++){
result.push_back(matrix[rowStart][i]);
count++;
}
rowStart++;
//从上到下
if(rowStart<=rowEnd){
for(int i=rowStart;i<=rowEnd;i++){
result.push_back(matrix[i][colEnd]);
count++;
}
colEnd--;
//从右到左
if(colEnd>=colStart){
for(int i=colEnd;i>=colStart;i--){
result.push_back(matrix[rowEnd][i]);
count++;
}
rowEnd--;
//从下到上
if(rowEnd>=rowStart){
for(int i=rowEnd;i>=rowStart;i--){
result.push_back(matrix[i][colStart]);
count++;
}
colStart++;
}
}
}
}
return result;
}
------------------------------------------
例如,
假设n = 3,您应该返回以下矩阵:
[
[1,2,3]
[8,9,4]
[7,6,5]
]
思路:
即从四个方向构造数组
vector<vector<int> > generateMatrix(int n) { vector<vector<int>> result(n,vector<int>(n,0)); int count = 1; int rowStart=0; int rowEnd=n-1; int colStart=0; int colEnd=n-1; while(count<=n*n){ //从左到右 for(int i=colStart;i<=colEnd;i++){ result[rowStart][i]=count++; } rowStart++; //从上到下 for(int i=rowStart;i<=rowEnd;i++){ result[i][colEnd]=count++; } colEnd--; //从右到左 for(int i=colEnd;i>=colStart;i--){ 4000 result[rowEnd][i]=count++; } rowEnd--; //从下到上 for(int i=rowEnd;i>=rowStart;i--){ result[i][colStart]=count++; } colStart++; } return result; }
延伸 打印螺旋数组
代码:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
int rows=matrix.size();
int cols=0;
if(rows){
cols=matrix[0].size();
}
vector<int> result;
int rowStart=0;
int rowEnd=rows-1;
int colStart=0;
int colEnd=cols-1;
int count=0;
while(count<cols*rows){
//从左到右
for(int i=colStart;i<=colEnd;i++){
result.push_back(matrix[rowStart][i]);
count++;
}
rowStart++;
//从上到下
if(rowStart<=rowEnd){
for(int i=rowStart;i<=rowEnd;i++){
result.push_back(matrix[i][colEnd]);
count++;
}
colEnd--;
//从右到左
if(colEnd>=colStart){
for(int i=colEnd;i>=colStart;i--){
result.push_back(matrix[rowEnd][i]);
count++;
}
rowEnd--;
//从下到上
if(rowEnd>=rowStart){
for(int i=rowEnd;i>=rowStart;i--){
result.push_back(matrix[i][colStart]);
count++;
}
colStart++;
}
}
}
}
return result;
}
相关文章推荐
- Java算法给定一个整数数组,找出其中两个数相加等于目标值
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)
- 给定一个整数sum,从有N个无序元素的数组中寻找元素a、b、c、d,使得 a+b+c+d =sum,最快的平均时间复杂度是____。
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组,先排序,然后输出排序后的数组的值(Arrays.sort排序&冒泡)
- 两数之和:给定一个整数数组,找出其中两个数相加等于目标值
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数---百度笔试题
- 给定一个数组,找出数组缺少的最小的正整数
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(1)
- 有这样一个数组A,大小为n,相邻元素差的绝对值都是1。如:A={4,5,6,5,6,7,8,9,10,9}。现在,给定A和目标整数t,请找到t在A中的位置。
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
- [置顶] 猜数游戏,在键盘上输入一个数,判断是否猜对(给定的数组和随机产生数组)。
- 给定一个整数数组,1≤a [i]≤n(n =数组的大小),一些元素出现两次,其他出现一次 查找在该数组中出现两次的所有元素
- 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
- 有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。 给定一个int数组A和数组的大小n,请
- java每日一题:给定一个整数数组arr和整数target,返回两个索引值,使得这两个索引值对应的整数的和等于target。(arr中有且仅有一组)
- 每天一道算法题(二):给定数组Arr和一个整数aim,请返回哪两个位置的数可以加出aim来。
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)
- 程序员面试金典: 9.4树与图 4.3给定一个有序整数数组,元素各不相同且按升序排列,创建一颗高度最小的二叉查找树。
- 有一个整数数组(包括正数 负数 和0),给定一个M值,要求数组中的一个或多个值相加的和等于M,有多少种组合?