这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战
59. 螺旋矩阵 II
给你一个正整数 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
解题思路
按层进行数字的填充,每一层都按四条边的位置依次填充。对于每层,从左上方开始以顺时针的顺序填入所有元素。左上方
代码
class Solution {
int z=1;
public int[][] generateMatrix(int n) {
int[][] matrix = new int[n][n];
int r=matrix.length,c=matrix.length,x=0,y=0;
put(r,c,x,y,matrix);
return matrix;
}
public void put (int r,int c,int x,int y,int[][] matrix)
{
if(r<=0||c<=0) return;//矩阵有偶数层
if(r==1)//矩阵有奇数层,最后一层只有一个元素
{
matrix[y][x]=z;
return;
}
for (int i=x;i<x+c;i++)
matrix[y][i]=z++;
for (int i=y+1;i<y+r-1;i++)
matrix[i][x+c-1]=z++;
for (int i=x+c-1;i>=x;i--)
matrix[y+r-1][i]=z++;
for (int i=y+r-2;i>y;i--)
matrix[i][x]=z++;
put(r-2,c-2,x+1,y+1,matrix);
}
}
时间复杂度:O(n^2),其中 n 是给定的正整数。矩阵的大小是n×n,需要填入矩阵中的每个元素。
空间复杂度:O(1)。除了返回的矩阵以外,空间复杂度是常数。
224. 基本计算器
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
示例 1:
输入:s = "1 + 1" 输出:2 示例 2:
输入:s = " 2-1 + 2 " 输出:3 示例 3:
输入:s = "(1+(4+5+2)-3)+(6+8)" 输出:23
解题思路
使用两个栈,一个保存数字,一个保存操作符
代码
class Solution {
public int calculate(String s) {
Stack<Integer> stack=new Stack<>();
Stack<Integer> characterStack=new Stack<>();
int n=s.length();int i = 0,sign=1,cur=0;
while ( i < n) {
char c = s.charAt(i);
if(c==' ') {
i++;
continue;
}
if(Character.isDigit(c))//获取操作数
{
int sum=0;
while (i<n&&Character.isDigit(s.charAt(i)))
{
sum*=10;
sum+=s.charAt(i)-'0';
i++;
}
cur+=sign*sum;
i--;
}else {
if(c=='+'||c=='-')
sign=c=='+'?1:-1;
else if(c=='(')//将之前的运算结果和括号前的操作符进栈,开始运算括号内的表达式
{
characterStack.push(sign);
stack.push(cur);
cur=0;
sign=1;
}else {//将括号内的计算结果与括号前的计算结果进行运算
cur=stack.pop()+cur*characterStack.pop();
}
}
i++;
}
return cur;
}
}