mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:22:55 +08:00
Merge branch 'youngyangyang04:master' into master
This commit is contained in:
@ -450,6 +450,38 @@ var partition = function(s) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## TypeScript
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function partition(s: string): string[][] {
|
||||||
|
function isPalindromeStr(s: string, left: number, right: number): boolean {
|
||||||
|
while (left < right) {
|
||||||
|
if (s[left++] !== s[right--]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function backTracking(s: string, startIndex: number, route: string[]): void {
|
||||||
|
let length: number = s.length;
|
||||||
|
if (length === startIndex) {
|
||||||
|
resArr.push(route.slice());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (let i = startIndex; i < length; i++) {
|
||||||
|
if (isPalindromeStr(s, startIndex, i)) {
|
||||||
|
route.push(s.slice(startIndex, i + 1));
|
||||||
|
backTracking(s, i + 1, route);
|
||||||
|
route.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const resArr: string[][] = [];
|
||||||
|
backTracking(s, 0, []);
|
||||||
|
return resArr;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
## C
|
## C
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
@ -208,6 +208,75 @@ class Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```java
|
||||||
|
public class Solution {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
int num[] = {1,5,11,5};
|
||||||
|
canPartition(num);
|
||||||
|
|
||||||
|
}
|
||||||
|
public static boolean canPartition(int[] nums) {
|
||||||
|
int len = nums.length;
|
||||||
|
// 题目已经说非空数组,可以不做非空判断
|
||||||
|
int sum = 0;
|
||||||
|
for (int num : nums) {
|
||||||
|
sum += num;
|
||||||
|
}
|
||||||
|
// 特判:如果是奇数,就不符合要求
|
||||||
|
if ((sum %2 ) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int target = sum / 2; //目标背包容量
|
||||||
|
// 创建二维状态数组,行:物品索引,列:容量(包括 0)
|
||||||
|
/*
|
||||||
|
dp[i][j]表示从数组的 [0, i] 这个子区间内挑选一些正整数
|
||||||
|
每个数只能用一次,使得这些数的和恰好等于 j。
|
||||||
|
*/
|
||||||
|
boolean[][] dp = new boolean[len][target + 1];
|
||||||
|
|
||||||
|
// 先填表格第 0 行,第 1 个数只能让容积为它自己的背包恰好装满 (这里的dp[][]数组的含义就是“恰好”,所以就算容积比它大的也不要)
|
||||||
|
if (nums[0] <= target) {
|
||||||
|
dp[0][nums[0]] = true;
|
||||||
|
}
|
||||||
|
// 再填表格后面几行
|
||||||
|
//外层遍历物品
|
||||||
|
for (int i = 1; i < len; i++) {
|
||||||
|
//内层遍历背包
|
||||||
|
for (int j = 0; j <= target; j++) {
|
||||||
|
// 直接从上一行先把结果抄下来,然后再修正
|
||||||
|
dp[i][j] = dp[i - 1][j];
|
||||||
|
|
||||||
|
//如果某个物品单独的重量恰好就等于背包的重量,那么也是满足dp数组的定义的
|
||||||
|
if (nums[i] == j) {
|
||||||
|
dp[i][j] = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//如果某个物品的重量小于j,那就可以看该物品是否放入背包
|
||||||
|
//dp[i - 1][j]表示该物品不放入背包,如果在 [0, i - 1] 这个子区间内已经有一部分元素,使得它们的和为 j ,那么 dp[i][j] = true;
|
||||||
|
//dp[i - 1][j - nums[i]]表示该物品放入背包。如果在 [0, i - 1] 这个子区间内就得找到一部分元素,使得它们的和为 j - nums[i]。
|
||||||
|
if (nums[i] < j) {
|
||||||
|
dp[i][j] = dp[i - 1][j] || dp[i - 1][j - nums[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
for (int j = 0; j <= target; j++) {
|
||||||
|
System.out.print(dp[i][j]+" ");
|
||||||
|
}
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
return dp[len - 1][target];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//dp数组的打印结果
|
||||||
|
false true false false false false false false false false false false
|
||||||
|
false true false false false true true false false false false false
|
||||||
|
false true false false false true true false false false false true
|
||||||
|
false true false false false true true false false false true true
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
二维数组版本(易于理解):
|
二维数组版本(易于理解):
|
||||||
```Java
|
```Java
|
||||||
class Solution {
|
class Solution {
|
||||||
|
@ -277,7 +277,30 @@ int fib(int n){
|
|||||||
return fib(n-1) + fib(n-2);
|
return fib(n-1) + fib(n-2);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
### Rust
|
||||||
|
动态规划:
|
||||||
|
```Rust
|
||||||
|
pub fn fib(n: i32) -> i32 {
|
||||||
|
let n = n as usize;
|
||||||
|
let mut dp = vec![0; 31];
|
||||||
|
dp[1] = 1;
|
||||||
|
for i in 2..=n {
|
||||||
|
dp[i] = dp[i - 1] + dp[i - 2];
|
||||||
|
}
|
||||||
|
dp[n]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
递归实现:
|
||||||
|
```Rust
|
||||||
|
pub fn fib(n: i32) -> i32 {
|
||||||
|
//若n小于等于1,返回n
|
||||||
|
f n <= 1 {
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
//否则返回fib(n-1) + fib(n-2)
|
||||||
|
return fib(n - 1) + fib(n - 2);
|
||||||
|
}
|
||||||
|
```
|
||||||
-----------------------
|
-----------------------
|
||||||
<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>
|
||||||
|
Reference in New Issue
Block a user