mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
Merge branch 'master' of github.com:youngyangyang04/leetcode-master
This commit is contained in:
@ -151,6 +151,96 @@ if (nums[k] + nums[i] > target && nums[i] >= 0) {
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
### C:
|
||||
|
||||
```C
|
||||
/* qsort */
|
||||
static int cmp(const void* arg1, const void* arg2) {
|
||||
int a = *(int *)arg1;
|
||||
int b = *(int *)arg2;
|
||||
return (a > b);
|
||||
}
|
||||
|
||||
int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** returnColumnSizes) {
|
||||
|
||||
/* 对nums数组进行排序 */
|
||||
qsort(nums, numsSize, sizeof(int), cmp);
|
||||
|
||||
int **res = (int **)malloc(sizeof(int *) * 40000);
|
||||
int index = 0;
|
||||
|
||||
/* k */
|
||||
for (int k = 0; k < numsSize - 3; k++) { /* 第一级 */
|
||||
|
||||
/* k剪枝 */
|
||||
if ((nums[k] > target) && (nums[k] >= 0)) {
|
||||
break;
|
||||
}
|
||||
/* k去重 */
|
||||
if ((k > 0) && (nums[k] == nums[k - 1])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* i */
|
||||
for (int i = k + 1; i < numsSize - 2; i++) { /* 第二级 */
|
||||
|
||||
/* i剪枝 */
|
||||
if ((nums[k] + nums[i] > target) && (nums[i] >= 0)) {
|
||||
break;
|
||||
}
|
||||
/* i去重 */
|
||||
if ((i > (k + 1)) && (nums[i] == nums[i - 1])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* left and right */
|
||||
int left = i + 1;
|
||||
int right = numsSize - 1;
|
||||
|
||||
while (left < right) {
|
||||
|
||||
/* 防止大数溢出 */
|
||||
long long val = (long long)nums[k] + nums[i] + nums[left] + nums[right];
|
||||
if (val > target) {
|
||||
right--;
|
||||
} else if (val < target) {
|
||||
left++;
|
||||
} else {
|
||||
int *res_tmp = (int *)malloc(sizeof(int) * 4);
|
||||
res_tmp[0] = nums[k];
|
||||
res_tmp[1] = nums[i];
|
||||
res_tmp[2] = nums[left];
|
||||
res_tmp[3] = nums[right];
|
||||
res[index++] = res_tmp;
|
||||
|
||||
/* right去重 */
|
||||
while ((right > left) && (nums[right] == nums[right - 1])) {
|
||||
right--;
|
||||
}
|
||||
/* left去重 */
|
||||
while ((left < right) && (nums[left] == nums[left + 1])) {
|
||||
left++;
|
||||
}
|
||||
|
||||
/* 更新right与left */
|
||||
left++, right--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 返回值处理 */
|
||||
*returnSize = index;
|
||||
|
||||
int *column = (int *)malloc(sizeof(int) * index);
|
||||
for (int i = 0; i < index; i++) {
|
||||
column[i] = 4;
|
||||
}
|
||||
*returnColumnSizes = column;
|
||||
return res;
|
||||
}
|
||||
```
|
||||
|
||||
### Java:
|
||||
|
||||
```Java
|
||||
|
@ -550,6 +550,27 @@ function uniquePathsWithObstacles(obstacleGrid: number[][]): number {
|
||||
};
|
||||
```
|
||||
|
||||
// 版本二: dp改為使用一維陣列,從終點開始遍歷
|
||||
```typescript
|
||||
function uniquePathsWithObstacles(obstacleGrid: number[][]): number {
|
||||
const m = obstacleGrid.length;
|
||||
const n = obstacleGrid[0].length;
|
||||
|
||||
const dp: number[] = new Array(n).fill(0);
|
||||
dp[n - 1] = 1;
|
||||
|
||||
// 由下而上,右而左進行遍歷
|
||||
for (let i = m - 1; i >= 0; i--) {
|
||||
for (let j = n - 1; j >= 0; j--) {
|
||||
if (obstacleGrid[i][j] === 1) dp[j] = 0;
|
||||
else dp[j] = dp[j] + (dp[j + 1] || 0);
|
||||
}
|
||||
}
|
||||
|
||||
return dp[0];
|
||||
};
|
||||
```
|
||||
|
||||
### Rust
|
||||
|
||||
```Rust
|
||||
|
@ -241,6 +241,33 @@ class Solution:
|
||||
|
||||
### Go:
|
||||
|
||||
使用栈
|
||||
```go
|
||||
func removeDuplicates(s string) string {
|
||||
stack := make([]rune, 0)
|
||||
for _, val := range s {
|
||||
if len(stack) == 0 || val != stack[len(stack)-1] {
|
||||
stack = append(stack, val)
|
||||
} else {
|
||||
stack = stack[:len(stack)-1]
|
||||
}
|
||||
}
|
||||
var res []rune
|
||||
for len(stack) != 0 { // 将栈中元素放到result字符串汇总
|
||||
res = append(res, stack[len(stack)-1])
|
||||
stack = stack[:len(stack)-1]
|
||||
}
|
||||
// 此时字符串需要反转一下
|
||||
l, r := 0, len(res)-1
|
||||
for l < r {
|
||||
res[l], res[r] = res[r], res[l]
|
||||
l++
|
||||
r--
|
||||
}
|
||||
return string(res)
|
||||
}
|
||||
```
|
||||
拿字符串直接作为栈,省去了栈还要转为字符串的操作
|
||||
```go
|
||||
func removeDuplicates(s string) string {
|
||||
var stack []byte
|
||||
|
@ -362,10 +362,43 @@ main();
|
||||
|
||||
### Scala:
|
||||
|
||||
|
||||
### PHP:
|
||||
|
||||
```php
|
||||
<?php
|
||||
// 标准输入
|
||||
$s = trim(fgets(STDIN));
|
||||
$oldLen = strlen($s);
|
||||
$count = 0;
|
||||
for ($i = 0; $i < $oldLen; $i++) {
|
||||
if (is_numeric($s[$i])) {
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
|
||||
// 扩充字符串
|
||||
$s = str_pad($s, $oldLen + $count * 5);
|
||||
$newLen = strlen($s);
|
||||
while($oldLen >= 0) {
|
||||
if (is_numeric($s[$oldLen])) {
|
||||
$s[$newLen--] = 'r';
|
||||
$s[$newLen--] = 'e';
|
||||
$s[$newLen--] = 'b';
|
||||
$s[$newLen--] = 'm';
|
||||
$s[$newLen--] = 'u';
|
||||
$s[$newLen--] = 'n';
|
||||
} else {
|
||||
$s[$newLen--] = $s[$oldLen];
|
||||
}
|
||||
$oldLen--;
|
||||
}
|
||||
|
||||
echo $s;
|
||||
?>
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
### Rust:
|
||||
|
||||
|
||||
|
@ -300,33 +300,50 @@ int main()
|
||||
```javascript
|
||||
// JS中字符串内不可单独修改
|
||||
|
||||
// 右旋转
|
||||
function reverseLeftWords(s, k) {
|
||||
const reverse = (sList, start, end) => {
|
||||
for (let i = start, j = end; i < j; i++, j--) {
|
||||
[sList[i], sList[j]] = [sList[j], sList[i]];
|
||||
}
|
||||
}
|
||||
const sList = Array.from(s);
|
||||
reverse(sList, 0, sList.length - k - 1);
|
||||
reverse(sList, sList.length - k, sList.length - 1);
|
||||
reverse(sList, 0, sList.length - 1);
|
||||
return sList.join('');
|
||||
const readline = require('readline')
|
||||
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
})
|
||||
|
||||
const inputs = []; // 存储输入
|
||||
|
||||
rl.on('line', function(data) {
|
||||
inputs.push(data);
|
||||
|
||||
}).on('close', function() {
|
||||
const res = deal(inputs);
|
||||
// 打印结果
|
||||
console.log(res);
|
||||
})
|
||||
|
||||
// 对传入的数据进行处理
|
||||
function deal(inputs) {
|
||||
let [k, s] = inputs;
|
||||
const len = s.length - 1;
|
||||
k = parseInt(k);
|
||||
str = s.split('');
|
||||
|
||||
str = reverseStr(str, 0, len - k)
|
||||
str = reverseStr(str, len - k + 1, len)
|
||||
str = reverseStr(str, 0, len)
|
||||
|
||||
return str.join('');
|
||||
}
|
||||
|
||||
// 左旋转
|
||||
var reverseLeftWords = function(s, n) {
|
||||
const reverse = (sList, start, end) => {
|
||||
for (let i = start, j = end; i < j; i++, j--) {
|
||||
[sList[i], sList[j]] = [sList[j], sList[i]];
|
||||
// 根据提供的范围进行翻转
|
||||
function reverseStr(s, start, end) {
|
||||
|
||||
while (start < end) {
|
||||
[s[start], s[end]] = [s[end], s[start]]
|
||||
|
||||
start++;
|
||||
end--;
|
||||
}
|
||||
}
|
||||
const sList = s.split('');
|
||||
reverse(sList, 0, n - 1);
|
||||
reverse(sList, n, sList.length - 1);
|
||||
reverse(sList, 0, sList.length - 1);
|
||||
return sList.join('');
|
||||
};
|
||||
|
||||
return s;
|
||||
}
|
||||
```
|
||||
|
||||
### TypeScript:
|
||||
@ -338,10 +355,35 @@ var reverseLeftWords = function(s, n) {
|
||||
|
||||
### PHP:
|
||||
|
||||
```php
|
||||
<?php
|
||||
// 反转函数
|
||||
function reverse(&$s, $start, $end) {
|
||||
for ($i = $start, $j = $end; $i < $j; $i++, $j--) {
|
||||
$tmp = $s[$i];
|
||||
$s[$i] = $s[$j];
|
||||
$s[$j] = $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
// 标准输入:读取右旋转位数和字符串
|
||||
$n = trim(fgets(STDIN));
|
||||
$s = trim(fgets(STDIN));
|
||||
// 字符串长度
|
||||
$len = strlen($s);
|
||||
// 先部分反转
|
||||
reverse($s, $len - $n, $len - 1);
|
||||
reverse($s, 0, $len - $n - 1);
|
||||
// 再整体反转
|
||||
reverse($s, 0, $len - 1);
|
||||
|
||||
echo $s;
|
||||
?>
|
||||
```
|
||||
|
||||
|
||||
### Scala:
|
||||
|
||||
|
||||
### Rust:
|
||||
|
||||
|
||||
|
@ -186,7 +186,56 @@ int main() {
|
||||
### Java
|
||||
|
||||
### Python
|
||||
```python
|
||||
from collections import deque
|
||||
|
||||
# 处理输入
|
||||
n, m = list(map(int, input().strip().split()))
|
||||
g = []
|
||||
for _ in range(n):
|
||||
row = list(map(int, input().strip().split()))
|
||||
g.append(row)
|
||||
|
||||
# 定义四个方向、孤岛面积(遍历完边缘后会被重置)
|
||||
directions = [[0,1], [1,0], [-1,0], [0,-1]]
|
||||
count = 0
|
||||
|
||||
# 广搜
|
||||
def bfs(r, c):
|
||||
global count
|
||||
q = deque()
|
||||
q.append((r, c))
|
||||
g[r][c] = 0
|
||||
count += 1
|
||||
|
||||
while q:
|
||||
r, c = q.popleft()
|
||||
for di in directions:
|
||||
next_r = r + di[0]
|
||||
next_c = c + di[1]
|
||||
if next_c < 0 or next_c >= m or next_r < 0 or next_r >= n:
|
||||
continue
|
||||
if g[next_r][next_c] == 1:
|
||||
q.append((next_r, next_c))
|
||||
g[next_r][next_c] = 0
|
||||
count += 1
|
||||
|
||||
|
||||
for i in range(n):
|
||||
if g[i][0] == 1: bfs(i, 0)
|
||||
if g[i][m-1] == 1: bfs(i, m-1)
|
||||
|
||||
for i in range(m):
|
||||
if g[0][i] == 1: bfs(0, i)
|
||||
if g[n-1][i] == 1: bfs(n-1, i)
|
||||
|
||||
count = 0
|
||||
for i in range(n):
|
||||
for j in range(m):
|
||||
if g[i][j] == 1: bfs(i, j)
|
||||
|
||||
print(count)
|
||||
```
|
||||
### Go
|
||||
|
||||
### Rust
|
||||
|
@ -188,7 +188,7 @@ python代码
|
||||
大家提交代码的热情太高了,我有时候根本处理不过来,但我必须当天处理完,否则第二天代码冲突会越来越多。
|
||||
<div align="center"><img src='https://code-thinking-1253855093.file.myqcloud.com/pics/20210514091457392.png' width=500 alt=''></img></div>
|
||||
|
||||
一天晚分别有两位录友提交了 30多道 java代码,全部冲突,解决冲突处理的我脖子疼[哭]
|
||||
一天晚上分别有两位录友提交了 30多道 java代码,全部冲突,解决冲突处理的我脖子疼[哭]
|
||||
|
||||
那么在处理冲突的时候 保留谁的代码,删点谁的代码呢?
|
||||
|
||||
|
Reference in New Issue
Block a user