给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
题目难度:中等难度
题目类型:用到数组,矩阵。
java解题代码参考
public class GenerateMatrix {
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
if (n == 0) {
return res;
}
int left = 0;
int right = n - 1;
int up = 0;
int down = n - 1;
int i = 1;
while (i <= n * n) {
for (int col = left; col <= right; col++) {
res[up][col] = i;
i++;
}
up++;
if (i <= n * n) {
for (int j = up; j <= down; j++) {
res[j][right] = i;
i++;
}
right--;
}
if (i <= n * n) {
for (int j = right; j >= left; j--) {
res[down][j] = i;
i++;
}
down--;
}
if (i <= n * n) {
for (int j = down; j >= up; j--) {
res[j][left] = i;
i++;
}
left++;
}
}
return res;
}
public static void main(String[] args) {
GenerateMatrix a = new GenerateMatrix();
a.generateMatrix(3);
}
}
算法题目《微生物增殖》描述
假设有两种微生物 X 和 Y
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
以下程序实现了这一功能,请你补全空白处内容:
提示:
分析可知,Y分别会在0.5,1.5,2.5······时被吃,所以,把60分钟分成120份,则在除以2余数为1时,Y的数目减少X个
#include <iostream>
using namespace std;
int main()
{
int x = 10, y = 90;
for (int i = 1; i <= 120; i++)
{
________________;
}
cout << y << endl;
}
解答代码如下
if (i % 2 == 1)
y -= x;
if (i % 4 == 0)
y *= 2;
if (i % 6 == 0)
x *= 2;
算法题目是不是很有意思。。。
- 学习算法要知道的几个常识:
持之以恒的去学习,没有什么是学不会的