- 题目详述
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
二.自我探寻
思路:跟之前写的螺旋矩阵一样,依然判断边界是否走过 然后改变方向 直到走到最后一个
代码:class Solution {
public int[][] generateMatrix(int n) {
int[][] matrix=new int[n][n];
int[][] nums=new int[n][n];
int a=0;/*x轴*/
int b=0;/*y轴*/
int q=1;/*0往上,1往右,2往下,3往左*/
int j=1;
while(j<=n*n)
{
matrix[b][a]=j;
nums[b][a]=1;
if(j==n*n)
{
break;
}
switch(q)
{
case 0:
b--;
break;
case 1:
a++;
break;
case 2:
b++;
break;
case 3:
a--;
break;
}
if(a>=n||(q==1&&nums[b][a]==1))
{
q=2;
a--;
continue;
}
else if(a<0||(q==3&&nums[b][a]==1))
{
q=0;
a++;
continue;
}
else if(b>=n||(q==2&&nums[b][a]==1))
{
q=3;
b--;
continue;
}
else if(b<0||(q==0&&nums[b][a]==1))
{
q=1;
b++;
continue;
}
j++;
}
return matrix;
}
}
评价:
- 网络学习过程(这部分还未完成)
不在原集合上修改,用空间换时间?
代码:public List<Interval> merge(List<Interval> intervals) {
Collections.sort(intervals, new Comparator<Interval>() {
public int compare(Interval a,Interval b)
{
return a.start-b.start;
}
});
if(intervals.size()==0||intervals.size()==1)
{
return intervals;
}
List<Interval> bIntervals=new ArrayList<Interval>();
Interval temp;
Interval newi;
for(int i=0;i<intervals.size();i++)
{
temp=intervals.get(i);
while(i!=intervals.size()-1&&temp.end>=intervals.get(i+1).start)
{
temp=new Interval(temp.start,Math.max(temp.end, intervals.get(i+1).end));
i++;
}
bIntervals.add(temp);
}
return bIntervals;
}
四.Python实现