一、有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
- 输入:nums = [-4,-1,0,3,10]
- 输出:[0,1,9,16,100]
- 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]
示例 2:
- 输入:nums = [-7,-3,2,3,11]
- 输出:[4,9,9,49,121]
二、螺旋矩阵
给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
public class test2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[][] nums = generateMatrix(n);
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
System.out.print(nums[i][j] + " ");
}
System.out.println();
}
}
public static int[][] generateMatrix(int n) {
int[][] nums = new int[n][n];
int startX = 0, startY = 0;
int count = 1;
int loop = 0; // 起始为0
while (loop < n / 2) {
// 顶部 左闭右开
for (int j = startY; j < n - 1 - loop; j++) {
nums[startX][j] = count++;
}
// 右列 左闭右开
for (int i = startX; i < n - 1 - loop; i++) {
nums[i][n - 1 - loop] = count++;
}
// 底部 左闭右开
for (int j = n - 1 - loop; j > loop; j--) {
nums[n - 1 - loop][j] = count++;
}
// 左列 左闭右开
for (int i = n - 1 - loop; i > loop; i--) {
nums[i][loop] = count++;
}
startX++;
startY++;
loop++;
}
// 如果n为奇数,填充中心位置
if (n % 2 == 1) {
nums[n / 2][n / 2] = count;
}
return nums;
}
}