1、1012分割线
54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
public static List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<>();
if(matrix==null||matrix.length==0) return result;
//此处right、bottom 按照实际值 length - 1 来计算,后续循环中都可以算大于等于或者小于等于
int left = 0;
int right = matrix[0].length - 1;
int top = 0;
int bottom = matrix.length - 1;
int numEle = matrix.length * matrix[0].length;
while (numEle >= 1) {
for (int i = left; i <= right && numEle >= 1; i++) {
result.add(matrix[top][i]);
numEle--;
}
top++;
for (int i = top; i <= bottom && numEle >= 1; i++) {
result.add(matrix[i][right]);
numEle--;
}
right--;
for (int i = right; i >= left && numEle >= 1; i--) {
result.add(matrix[bottom][i]);
numEle--;
}
bottom--;
for (int i = bottom; i >= top && numEle >= 1; i--) {
result.add(matrix[i][left]);
numEle--;
}
left++;
}
return result;
}
43. 字符串相乘
public String multiply(String num1, String num2) {
if("0".equals(num1) || "0".equals(num2)){
return "0";
}
int len1=num1.length();
int len2=num2.length();
int[] ans=new int[len1+len2];
for(int i=len1-1;i>=0;i--){
int value1=num1.charAt(i)-'0';
for(int j=len2-1;j>=0;j--){
int value2=num2.charAt(j)-'0';
int sum=ans[i+j+1]+value1*value2;
ans[i+j+1]=sum%10;
ans[i+j]+=sum/10;
}
}
StringBuilder sb=new StringBuilder();
for(int i=0;i<ans.length;i++){
if(i==0 && ans[i]==0){
continue;
}
sb.append(ans[i]);
}
return sb.toString();
}
415. 字符串相加
public String addStrings(String num1, String num2) {
StringBuilder res =new StringBuilder();
int len1=num1.length();
int len2=num2.length();
int carry = 0;
for(int i = 0; i < len1 || i < len2; i++){
int n1 = i < len1 ? num1.charAt(len1 - i - 1) - '0' : 0;
int n2 = i < len2 ? num2.charAt(len2 - i - 1) - '0' : 0;
int tmp = n1 + n2 + carry;
carry = tmp / 10;
res.append(tmp % 10);
}
if(carry == 1) res.append(1);
return res.reverse().toString();
}
56. 合并区间
public int[][] merge(int[][] intervals) {
if (intervals.length == 0) {
return new int[0][2];
}
Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
List<int[]> merged = new ArrayList<int[]>();
for (int[] interval: intervals) {
// 如果列表为空,或者当前区间与上一区间不重合,直接添加
if (merged.size() == 0 || merged.get(merged.size() - 1)[1] < interval[0]) {
merged.add(interval);
} else {
// 否则的话,我们就可以与上一区间进行合并
merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], interval[1]);
}
}
return merged.toArray(new int[0][]);
}
146. LRU 缓存
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。