mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 02:53:31 +08:00
Merge pull request #1592 from ekertree/master
添加 0844比较含退格的字符串、54.螺旋矩阵 Java 版本
This commit is contained in:
@ -133,5 +133,73 @@ public:
|
|||||||
|
|
||||||
## 其他语言版本
|
## 其他语言版本
|
||||||
|
|
||||||
|
### Java
|
||||||
|
|
||||||
|
```java
|
||||||
|
class Solution {
|
||||||
|
public List<Integer> spiralOrder(int[][] matrix) {
|
||||||
|
//存放数组的数
|
||||||
|
List<Integer> ans = new ArrayList<>();
|
||||||
|
//列数
|
||||||
|
int columns = matrix[0].length;
|
||||||
|
//行数
|
||||||
|
int rows = matrix.length;
|
||||||
|
//遍历起点
|
||||||
|
int start = 0;
|
||||||
|
//循环的次数 行数和列数中的最小值除以二
|
||||||
|
int loop = Math.min(rows,columns) / 2;
|
||||||
|
//未遍历的中间列(行)的列(行)下标
|
||||||
|
int mid = loop;
|
||||||
|
//终止条件
|
||||||
|
int offSet = 1;
|
||||||
|
int i,j;
|
||||||
|
while(loop-- > 0) {
|
||||||
|
//初始化起点
|
||||||
|
i = j = start;
|
||||||
|
|
||||||
|
//从左往右
|
||||||
|
for(; j < columns - offSet; j++)
|
||||||
|
ans.add(matrix[i][j]);
|
||||||
|
|
||||||
|
//从上往下
|
||||||
|
for(; i < rows - offSet; i++)
|
||||||
|
ans.add(matrix[i][j]);
|
||||||
|
|
||||||
|
//从右往左
|
||||||
|
for(; j > start; j--)
|
||||||
|
ans.add(matrix[i][j]);
|
||||||
|
|
||||||
|
//从下往上
|
||||||
|
for(; i > start; i--)
|
||||||
|
ans.add(matrix[i][j]);
|
||||||
|
|
||||||
|
//每循环一次 改变起点位置
|
||||||
|
start++;
|
||||||
|
//终止条件改变
|
||||||
|
offSet++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//如果行和列中的最小值是奇数 则会产生中间行或者中间列没有遍历
|
||||||
|
if(Math.min(rows,columns) % 2 != 0) {
|
||||||
|
//行大于列则产生中间列
|
||||||
|
if(rows > columns) {
|
||||||
|
//中间列的行的最大下标的下一位的下标为mid + rows - columns + 1
|
||||||
|
for(int k = mid; k < mid + rows - columns + 1; k++) {
|
||||||
|
ans.add(matrix[k][mid]);
|
||||||
|
}
|
||||||
|
}else {//列大于等于行则产生中间行
|
||||||
|
//中间行的列的最大下标的下一位的下标为mid + columns - rows + 1
|
||||||
|
for(int k = mid; k < mid + columns - rows + 1; k++) {
|
||||||
|
ans.add(matrix[mid][k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
@ -157,7 +157,7 @@ public:
|
|||||||
|
|
||||||
## 其他语言版本
|
## 其他语言版本
|
||||||
|
|
||||||
### Java:
|
### Java
|
||||||
|
|
||||||
```java
|
```java
|
||||||
// 普通方法(使用栈的思路)
|
// 普通方法(使用栈的思路)
|
||||||
@ -214,7 +214,80 @@ public static boolean backspaceCompare(String s, String t) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```java
|
||||||
|
class Solution {
|
||||||
|
public static boolean backspaceCompare(String s, String t) {
|
||||||
|
return getStr(s).equals(getStr(t));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getStr(String s) { //使用快慢双指针去除字符串中的#
|
||||||
|
int slowIndex;
|
||||||
|
int fastIndex = 0;
|
||||||
|
StringBuilder builder = new StringBuilder(s); //StringBuilder用于修改字符串
|
||||||
|
for(slowIndex = 0; fastIndex < s.length(); fastIndex++) {
|
||||||
|
if(builder.charAt(fastIndex) != '#') {
|
||||||
|
builder.setCharAt(slowIndex++,builder.charAt(fastIndex));
|
||||||
|
} else {
|
||||||
|
if(slowIndex > 0) {
|
||||||
|
slowIndex--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return builder.toString().substring(0,slowIndex); //截取有效字符串
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
从后往前双指针:
|
||||||
|
|
||||||
|
```java
|
||||||
|
class Solution {
|
||||||
|
public static boolean backspaceCompare(String s, String t) {
|
||||||
|
int sSkipNum = 0; //记录s的#的个数
|
||||||
|
int tSkipNum = 0; //记录t的#的个数
|
||||||
|
int sIndex = s.length() - 1;
|
||||||
|
int tIndex = t.length() - 1;
|
||||||
|
while(true) {
|
||||||
|
while(sIndex >= 0) { //每次记录连续的#并跳过被删除的字符
|
||||||
|
if(s.charAt(sIndex) == '#') {
|
||||||
|
sSkipNum++;
|
||||||
|
} else {
|
||||||
|
if(sSkipNum > 0) {
|
||||||
|
sSkipNum--;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sIndex--;
|
||||||
|
}
|
||||||
|
while(tIndex >= 0) { //每次记录连续的#并跳过被删除的字符
|
||||||
|
if(t.charAt(tIndex) == '#') {
|
||||||
|
tSkipNum++;
|
||||||
|
} else {
|
||||||
|
if(tSkipNum > 0) {
|
||||||
|
tSkipNum--;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tIndex--;
|
||||||
|
}
|
||||||
|
if(sIndex < 0 || tIndex < 0) { //s 或者 t遍历完了
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(s.charAt(sIndex) != t.charAt(tIndex)) { //当前下标的字符不相等
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
sIndex--;
|
||||||
|
tIndex--;
|
||||||
|
}
|
||||||
|
if(sIndex == -1 && tIndex == -1) { //同时遍历完 则相等
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### python
|
### python
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user