Skip to content

Commit 1597653

Browse files
committed
feat: add solutions to lc problem: No.0969
No.0969.Pancake Sorting
1 parent 79b0d33 commit 1597653

File tree

6 files changed

+294
-2
lines changed

6 files changed

+294
-2
lines changed

solution/0900-0999/0969.Pancake Sorting/README.md

Lines changed: 101 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,61 @@
6666
<!-- 这里可写当前语言的特殊实现逻辑 -->
6767

6868
```python
69-
69+
class Solution:
70+
def pancakeSort(self, arr: List[int]) -> List[int]:
71+
def reverse(arr, j):
72+
i = 0
73+
while i < j:
74+
arr[i], arr[j] = arr[j], arr[i]
75+
i, j = i + 1, j - 1
76+
77+
n = len(arr)
78+
ans = []
79+
for i in range(n - 1, 0, -1):
80+
j = i
81+
while j > 0 and arr[j] != i + 1:
82+
j -= 1
83+
if j < i:
84+
if j > 0:
85+
ans.append(j + 1)
86+
reverse(arr, j)
87+
ans.append(i + 1)
88+
reverse(arr, i)
89+
return ans
7090
```
7191

7292
### **Java**
7393

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

7696
```java
97+
class Solution {
98+
public List<Integer> pancakeSort(int[] arr) {
99+
int n = arr.length;
100+
List<Integer> ans = new ArrayList<>();
101+
for (int i = n - 1; i > 0; --i) {
102+
int j = i;
103+
for (; j > 0 && arr[j] != i + 1; --j);
104+
if (j < i) {
105+
if (j > 0) {
106+
ans.add(j + 1);
107+
reverse(arr, j);
108+
}
109+
ans.add(i + 1);
110+
reverse(arr, i);
111+
}
112+
}
113+
return ans;
114+
}
77115

116+
private void reverse(int[] arr, int j) {
117+
for (int i = 0; i < j; ++i, --j) {
118+
int t = arr[i];
119+
arr[i] = arr[j];
120+
arr[j] = t;
121+
}
122+
}
123+
}
78124
```
79125

80126
### **TypeScript**
@@ -105,6 +151,60 @@ function reverse (nums: Array<number>, end: number): void {
105151
}
106152
```
107153

154+
### **C++**
155+
156+
```cpp
157+
class Solution {
158+
public:
159+
vector<int> pancakeSort(vector<int>& arr) {
160+
int n = arr.size();
161+
vector<int> ans;
162+
for (int i = n - 1; i > 0; --i)
163+
{
164+
int j = i;
165+
for (; j > 0 && arr[j] != i + 1; --j);
166+
if (j == i) continue;
167+
if (j > 0)
168+
{
169+
ans.push_back(j + 1);
170+
reverse(arr.begin(), arr.begin() + j + 1);
171+
}
172+
ans.push_back(i + 1);
173+
reverse(arr.begin(), arr.begin() + i + 1);
174+
}
175+
return ans;
176+
}
177+
};
178+
```
179+
180+
### **Go**
181+
182+
```go
183+
func pancakeSort(arr []int) []int {
184+
var ans []int
185+
n := len(arr)
186+
reverse := func(j int) {
187+
for i := 0; i < j; i, j = i+1, j-1 {
188+
arr[i], arr[j] = arr[j], arr[i]
189+
}
190+
}
191+
for i := n - 1; i > 0; i-- {
192+
j := i
193+
for ; j > 0 && arr[j] != i+1; j-- {
194+
}
195+
if j < i {
196+
if j > 0 {
197+
ans = append(ans, j+1)
198+
reverse(j)
199+
}
200+
ans = append(ans, i+1)
201+
reverse(i)
202+
}
203+
}
204+
return ans
205+
}
206+
```
207+
108208
### **...**
109209

110210
```

solution/0900-0999/0969.Pancake Sorting/README_EN.md

Lines changed: 101 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,59 @@ Note that other answers, such as [3, 3], would also be accepted.
5757
### **Python3**
5858

5959
```python
60-
60+
class Solution:
61+
def pancakeSort(self, arr: List[int]) -> List[int]:
62+
def reverse(arr, j):
63+
i = 0
64+
while i < j:
65+
arr[i], arr[j] = arr[j], arr[i]
66+
i, j = i + 1, j - 1
67+
68+
n = len(arr)
69+
ans = []
70+
for i in range(n - 1, 0, -1):
71+
j = i
72+
while j > 0 and arr[j] != i + 1:
73+
j -= 1
74+
if j < i:
75+
if j > 0:
76+
ans.append(j + 1)
77+
reverse(arr, j)
78+
ans.append(i + 1)
79+
reverse(arr, i)
80+
return ans
6181
```
6282

6383
### **Java**
6484

6585
```java
86+
class Solution {
87+
public List<Integer> pancakeSort(int[] arr) {
88+
int n = arr.length;
89+
List<Integer> ans = new ArrayList<>();
90+
for (int i = n - 1; i > 0; --i) {
91+
int j = i;
92+
for (; j > 0 && arr[j] != i + 1; --j);
93+
if (j < i) {
94+
if (j > 0) {
95+
ans.add(j + 1);
96+
reverse(arr, j);
97+
}
98+
ans.add(i + 1);
99+
reverse(arr, i);
100+
}
101+
}
102+
return ans;
103+
}
66104

105+
private void reverse(int[] arr, int j) {
106+
for (int i = 0; i < j; ++i, --j) {
107+
int t = arr[i];
108+
arr[i] = arr[j];
109+
arr[j] = t;
110+
}
111+
}
112+
}
67113
```
68114

69115
### **TypeScript**
@@ -94,6 +140,60 @@ function reverse (nums: Array<number>, end: number): void {
94140
}
95141
```
96142

143+
### **C++**
144+
145+
```cpp
146+
class Solution {
147+
public:
148+
vector<int> pancakeSort(vector<int>& arr) {
149+
int n = arr.size();
150+
vector<int> ans;
151+
for (int i = n - 1; i > 0; --i)
152+
{
153+
int j = i;
154+
for (; j > 0 && arr[j] != i + 1; --j);
155+
if (j == i) continue;
156+
if (j > 0)
157+
{
158+
ans.push_back(j + 1);
159+
reverse(arr.begin(), arr.begin() + j + 1);
160+
}
161+
ans.push_back(i + 1);
162+
reverse(arr.begin(), arr.begin() + i + 1);
163+
}
164+
return ans;
165+
}
166+
};
167+
```
168+
169+
### **Go**
170+
171+
```go
172+
func pancakeSort(arr []int) []int {
173+
var ans []int
174+
n := len(arr)
175+
reverse := func(j int) {
176+
for i := 0; i < j; i, j = i+1, j-1 {
177+
arr[i], arr[j] = arr[j], arr[i]
178+
}
179+
}
180+
for i := n - 1; i > 0; i-- {
181+
j := i
182+
for ; j > 0 && arr[j] != i+1; j-- {
183+
}
184+
if j < i {
185+
if j > 0 {
186+
ans = append(ans, j+1)
187+
reverse(j)
188+
}
189+
ans = append(ans, i+1)
190+
reverse(i)
191+
}
192+
}
193+
return ans
194+
}
195+
```
196+
97197
### **...**
98198

99199
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
vector<int> pancakeSort(vector<int>& arr) {
4+
int n = arr.size();
5+
vector<int> ans;
6+
for (int i = n - 1; i > 0; --i)
7+
{
8+
int j = i;
9+
for (; j > 0 && arr[j] != i + 1; --j);
10+
if (j == i) continue;
11+
if (j > 0)
12+
{
13+
ans.push_back(j + 1);
14+
reverse(arr.begin(), arr.begin() + j + 1);
15+
}
16+
ans.push_back(i + 1);
17+
reverse(arr.begin(), arr.begin() + i + 1);
18+
}
19+
return ans;
20+
}
21+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
func pancakeSort(arr []int) []int {
2+
var ans []int
3+
n := len(arr)
4+
reverse := func(j int) {
5+
for i := 0; i < j; i, j = i+1, j-1 {
6+
arr[i], arr[j] = arr[j], arr[i]
7+
}
8+
}
9+
for i := n - 1; i > 0; i-- {
10+
j := i
11+
for ; j > 0 && arr[j] != i+1; j-- {
12+
}
13+
if j < i {
14+
if j > 0 {
15+
ans = append(ans, j+1)
16+
reverse(j)
17+
}
18+
ans = append(ans, i+1)
19+
reverse(i)
20+
}
21+
}
22+
return ans
23+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public List<Integer> pancakeSort(int[] arr) {
3+
int n = arr.length;
4+
List<Integer> ans = new ArrayList<>();
5+
for (int i = n - 1; i > 0; --i) {
6+
int j = i;
7+
for (; j > 0 && arr[j] != i + 1; --j);
8+
if (j < i) {
9+
if (j > 0) {
10+
ans.add(j + 1);
11+
reverse(arr, j);
12+
}
13+
ans.add(i + 1);
14+
reverse(arr, i);
15+
}
16+
}
17+
return ans;
18+
}
19+
20+
private void reverse(int[] arr, int j) {
21+
for (int i = 0; i < j; ++i, --j) {
22+
int t = arr[i];
23+
arr[i] = arr[j];
24+
arr[j] = t;
25+
}
26+
}
27+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution:
2+
def pancakeSort(self, arr: List[int]) -> List[int]:
3+
def reverse(arr, j):
4+
i = 0
5+
while i < j:
6+
arr[i], arr[j] = arr[j], arr[i]
7+
i, j = i + 1, j - 1
8+
9+
n = len(arr)
10+
ans = []
11+
for i in range(n - 1, 0, -1):
12+
j = i
13+
while j > 0 and arr[j] != i + 1:
14+
j -= 1
15+
if j < i:
16+
if j > 0:
17+
ans.append(j + 1)
18+
reverse(arr, j)
19+
ans.append(i + 1)
20+
reverse(arr, i)
21+
return ans

0 commit comments

Comments
 (0)