Skip to content

Commit d87c6ce

Browse files
committed
feat: add solutions to lc problem: No.1849
No.1849.Splitting a String Into Descending Consecutive Values
1 parent 72aac94 commit d87c6ce

File tree

6 files changed

+255
-2
lines changed

6 files changed

+255
-2
lines changed

solution/1800-1899/1849.Splitting a String Into Descending Consecutive Values/README.md

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,113 @@
6767

6868
<!-- 这里可写通用的实现逻辑 -->
6969

70+
**方法一:DFS**
71+
72+
从字符串的第一个字符开始,枚举所有可能的拆分位置,判断拆分出来的子串是否满足题目要求,如果满足则继续递归判断剩余的子串是否满足题目要求,直到遍历完整个字符串。
73+
74+
时间复杂度 $O(n^2)$,空间复杂度 $O(n)$。其中 $n$ 为字符串的长度。
75+
7076
<!-- tabs:start -->
7177

7278
### **Python3**
7379

7480
<!-- 这里可写当前语言的特殊实现逻辑 -->
7581

7682
```python
77-
83+
class Solution:
84+
def splitString(self, s: str) -> bool:
85+
def dfs(i, x, k):
86+
if i == len(s):
87+
return k > 1
88+
y = 0
89+
for j in range(i, len(s)):
90+
y = y * 10 + int(s[j])
91+
if (x == -1 or x - y == 1) and dfs(j + 1, y, k + 1):
92+
return True
93+
return False
94+
95+
return dfs(0, -1, 0)
7896
```
7997

8098
### **Java**
8199

82100
<!-- 这里可写当前语言的特殊实现逻辑 -->
83101

84102
```java
103+
class Solution {
104+
private String s;
105+
106+
public boolean splitString(String s) {
107+
this.s = s;
108+
return dfs(0, -1, 0);
109+
}
110+
111+
private boolean dfs(int i, long x, int k) {
112+
if (i == s.length()) {
113+
return k > 1;
114+
}
115+
long y = 0;
116+
for (int j = i; j < s.length(); ++j) {
117+
y = y * 10 + (s.charAt(j) - '0');
118+
if ((x == -1 || x - y == 1) && dfs(j + 1, y, k + 1)) {
119+
return true;
120+
}
121+
}
122+
return false;
123+
}
124+
}
125+
```
126+
127+
### **C++**
128+
129+
```cpp
130+
class Solution {
131+
public:
132+
bool splitString(string s) {
133+
function<bool(int, long long, int)> dfs = [&](int i, long long x, int k) -> bool {
134+
if (i == s.size()) {
135+
return k > 1;
136+
}
137+
long long y = 0;
138+
for (int j = i; j < s.size(); ++j) {
139+
y = y * 10 + (s[j] - '0');
140+
if (y > 1e10) {
141+
break;
142+
}
143+
if ((x == -1 || x - y == 1) && dfs(j + 1, y, k + 1)) {
144+
return true;
145+
}
146+
}
147+
return false;
148+
};
149+
return dfs(0, -1, 0);
150+
}
151+
};
152+
```
85153
154+
### **Go**
155+
156+
```go
157+
func splitString(s string) bool {
158+
var dfs func(i, x, k int) bool
159+
dfs = func(i, x, k int) bool {
160+
if i == len(s) {
161+
return k > 1
162+
}
163+
y := 0
164+
for j := i; j < len(s); j++ {
165+
y = y*10 + int(s[j]-'0')
166+
if y > int(1e10) {
167+
break
168+
}
169+
if (x == -1 || x-y == 1) && dfs(j+1, y, k+1) {
170+
return true
171+
}
172+
}
173+
return false
174+
}
175+
return dfs(0, -1, 0)
176+
}
86177
```
87178

88179
### **...**

solution/1800-1899/1849.Splitting a String Into Descending Consecutive Values/README_EN.md

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,98 @@ The values are in descending order with adjacent values differing by 1.
5858
### **Python3**
5959

6060
```python
61-
61+
class Solution:
62+
def splitString(self, s: str) -> bool:
63+
def dfs(i, x, k):
64+
if i == len(s):
65+
return k > 1
66+
y = 0
67+
for j in range(i, len(s)):
68+
y = y * 10 + int(s[j])
69+
if (x == -1 or x - y == 1) and dfs(j + 1, y, k + 1):
70+
return True
71+
return False
72+
73+
return dfs(0, -1, 0)
6274
```
6375

6476
### **Java**
6577

6678
```java
79+
class Solution {
80+
private String s;
81+
82+
public boolean splitString(String s) {
83+
this.s = s;
84+
return dfs(0, -1, 0);
85+
}
86+
87+
private boolean dfs(int i, long x, int k) {
88+
if (i == s.length()) {
89+
return k > 1;
90+
}
91+
long y = 0;
92+
for (int j = i; j < s.length(); ++j) {
93+
y = y * 10 + (s.charAt(j) - '0');
94+
if ((x == -1 || x - y == 1) && dfs(j + 1, y, k + 1)) {
95+
return true;
96+
}
97+
}
98+
return false;
99+
}
100+
}
101+
```
102+
103+
### **C++**
104+
105+
```cpp
106+
class Solution {
107+
public:
108+
bool splitString(string s) {
109+
function<bool(int, long long, int)> dfs = [&](int i, long long x, int k) -> bool {
110+
if (i == s.size()) {
111+
return k > 1;
112+
}
113+
long long y = 0;
114+
for (int j = i; j < s.size(); ++j) {
115+
y = y * 10 + (s[j] - '0');
116+
if (y > 1e10) {
117+
break;
118+
}
119+
if ((x == -1 || x - y == 1) && dfs(j + 1, y, k + 1)) {
120+
return true;
121+
}
122+
}
123+
return false;
124+
};
125+
return dfs(0, -1, 0);
126+
}
127+
};
128+
```
67129
130+
### **Go**
131+
132+
```go
133+
func splitString(s string) bool {
134+
var dfs func(i, x, k int) bool
135+
dfs = func(i, x, k int) bool {
136+
if i == len(s) {
137+
return k > 1
138+
}
139+
y := 0
140+
for j := i; j < len(s); j++ {
141+
y = y*10 + int(s[j]-'0')
142+
if y > int(1e10) {
143+
break
144+
}
145+
if (x == -1 || x-y == 1) && dfs(j+1, y, k+1) {
146+
return true
147+
}
148+
}
149+
return false
150+
}
151+
return dfs(0, -1, 0)
152+
}
68153
```
69154

70155
### **...**
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
bool splitString(string s) {
4+
function<bool(int, long long, int)> dfs = [&](int i, long long x, int k) -> bool {
5+
if (i == s.size()) {
6+
return k > 1;
7+
}
8+
long long y = 0;
9+
for (int j = i; j < s.size(); ++j) {
10+
y = y * 10 + (s[j] - '0');
11+
if (y > 1e10) {
12+
break;
13+
}
14+
if ((x == -1 || x - y == 1) && dfs(j + 1, y, k + 1)) {
15+
return true;
16+
}
17+
}
18+
return false;
19+
};
20+
return dfs(0, -1, 0);
21+
}
22+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func splitString(s string) bool {
2+
var dfs func(i, x, k int) bool
3+
dfs = func(i, x, k int) bool {
4+
if i == len(s) {
5+
return k > 1
6+
}
7+
y := 0
8+
for j := i; j < len(s); j++ {
9+
y = y*10 + int(s[j]-'0')
10+
if y > int(1e10) {
11+
break
12+
}
13+
if (x == -1 || x-y == 1) && dfs(j+1, y, k+1) {
14+
return true
15+
}
16+
}
17+
return false
18+
}
19+
return dfs(0, -1, 0)
20+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
private String s;
3+
4+
public boolean splitString(String s) {
5+
this.s = s;
6+
return dfs(0, -1, 0);
7+
}
8+
9+
private boolean dfs(int i, long x, int k) {
10+
if (i == s.length()) {
11+
return k > 1;
12+
}
13+
long y = 0;
14+
for (int j = i; j < s.length(); ++j) {
15+
y = y * 10 + (s.charAt(j) - '0');
16+
if ((x == -1 || x - y == 1) && dfs(j + 1, y, k + 1)) {
17+
return true;
18+
}
19+
}
20+
return false;
21+
}
22+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def splitString(self, s: str) -> bool:
3+
def dfs(i, x, k):
4+
if i == len(s):
5+
return k > 1
6+
y = 0
7+
for j in range(i, len(s)):
8+
y = y * 10 + int(s[j])
9+
if (x == -1 or x - y == 1) and dfs(j + 1, y, k + 1):
10+
return True
11+
return False
12+
13+
return dfs(0, -1, 0)

0 commit comments

Comments
 (0)