里面有非常多的题库 跟面经知识 真的非常良心了!!
JZ49 丑数🥚
题目描述🥚
解题思路🥚
根据题意可知 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。
我们可以定义一个数组 dp 用来存储 丑数的个数
题目要求从小到大排列丑数
最小的丑数是1 所以dp[0]=1
丑数的形式 通用公式就是2x3y5z
所以我们就将res[n]去乘以 2、3、5,然后比较出最小的那个,就是我们当前的下一个丑数了。
代码详解🥚
import java.util.*; public class Solution { public int GetUglyNumber_Solution(int index) { if(index<=6){ return index; //特判前6个丑数 } int i2=0,i3=0,i5=0; //定义三个变量 分别是包含质因子 2,3,5 乘的次数 int dp[]=new int[index]; dp[0]=1; for(int i=1;i<index;i++){ dp[i]=Math.min(dp[i2]*2,Math.min(dp[i3]*3,dp[i5]*5)); //第一次是 2 ,3, 5 比较得到最小值是2 if(dp[i]==dp[i2]*2) i2++; if(dp[i]==dp[i3]*3) i3++; if(dp[i]==dp[i5]*5) i5++; } return dp[index-1]; .//返回第n个 } }
JZ29 顺时针打印矩阵🥚
题目描述🥚
解题思路🥚
这道题正常模拟即可
注意边界问题
左右 边界 跟上下边界重合的时候
往右到底后再往下到底后再往左到底后再往上,结束这一圈,进入下一圈螺旋。
每次走完一步 都要判断 上下 边界 或者左右边界是否重合!
代码详解🥚
import java.util.*; import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> res=new ArrayList<>(); if( matrix.length==0){ return res; } int left=0; //左边界 int right=matrix[0].length-1; //右边界 int up=0; //上边界 int down=matrix.length-1; //下边界 while(left<=right&&up<=down){ //第一行从左到右进行遍历 for(int i=left;i<=right;i++) res.add(matrix[up][i]); up++; if(up>down) //如果上边界大于下边界就跳出循环 break; //右边界从上到下 for(int i=up;i<=down;i++) res.add(matrix[i][right]); //右边界向左 right--; if(left>right) break; for(int i=right;i>=left;i--) res.add(matrix[down][i]); down--; if(up>down) break; //左边界往上 for(int i=down;i>=up;i--) res.add(matrix[i][left]); left++; if(left>right) break; } return res; } }