给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
如图:
代码如下:
public static void main(String[] args) {
Solution solution = new Solution();
int[][] ints = solution.generateMatrix(1);
System.out.println(Arrays.deepToString(ints));
}
static class Solution{
public int[][] generateMatrix(int n) {
int [][] res=new int[n][n];
//循环次数
int loop=n/2;
//循环开始位置
int startY=0;
int startX=0;
//定义填充数字
int count=1;
//定义偏移量
int offset=1;
// 定义中间位置
int mid = n / 2;
while (loop>0){
int i=startY;
int j=startX;
// 模拟上侧从左到右
for(;j<startX+n-offset;++j){
res[startY][j]=count++;
}
// 模拟右侧从上到下
for (;i<startY+n-offset;i++){
res[i][j]=count++;
}
// 模拟下侧从右到左
for (;j>startX;j--){
res[i][j]=count++;
}
// 模拟左侧从下到上
for (;i>startY;i--){
res[i][j]=count++;
}
loop--;
startY += 1;
startX += 1;
offset+=2;
}
if (n%2==1){
res[mid][mid]=count;
}
return res;
}
}
}
思路:没循环一次偏移量就要+2;起始位置也要x和y坐标都要加一
长度最小字符串:
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0
核心代码如下:
class demo{
public int minSubArrayLen(int target, int[] nums) {
int left =0;
int sum=0;
int result=Integer.MAX_VALUE;
for(int right =0;right<nums.length;right++){
sum+=nums[right];
while(sum>=target){
result=Math.min(result,right-left+1);
sum-=nums[left++];
}
}
return result==Integer.MAX_VALUE?0:result;
}
}
关键就在while里面的核心