腾讯模拟笔试题
大概题意是这样的
输入一个数字,顺时针生成一个N阶的矩阵
比如:输入数字为: 3
生成矩阵为:
1 2 3
8 9 4
7 6 5
解题思路:我们考虑一圈一圈的生成矩阵,先生成最外面的一圈,然后生成第二圈。。。。
生成矩阵的时候我们要考虑边界的问题,通过矩阵的对角线的两个端点,因为矩阵是一个N x N的矩阵,所以就端点的x坐标和y坐标相等,用两个变量代替就ok
参考代码:
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = 2; int[][] arr = new int[n][n]; int begin = 0;//端点1 int end = n - 1;//端点2 int num = 0; while (begin <= end) { num = getArray(arr, begin, end, num); begin++; end--; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print(arr[i][j] + " "); } System.out.println(""); } } public static int getArray(int[][] arr, int begin, int end, int num) { if (begin == end) { arr[begin][end] = ++num; } else { int curR = begin; int curC = begin; while (curC < end) arr[begin][curC++] = ++num; while (curR < end) arr[curR++][end] = ++num; while (curC > begin) arr[end][curC--] = ++num; while (curR > begin) arr[curR--][begin] = ++num; } return num; } }