-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathArrangementOfStrings.java
More file actions
73 lines (52 loc) · 1.41 KB
/
ArrangementOfStrings.java
File metadata and controls
73 lines (52 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package swordPointOffer;
import java.util.LinkedList;
/**
* @Author: Wenhang Chen
* @Description:输入一个字符串,打印出该字符串中字符的所有排列。
* <p>
* 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
* <p>
*
* <p>
* 示例:
* <p>
* 输入:s = "abc"
* 输出:["abc","acb","bac","bca","cab","cba"]
*
* <p>
* 限制:
* <p>
* 1 <= s 的长度 <= 8
* @Date: Created in 9:22 3/26/2020
* @Modified by:
*/
public class ArrangementOfStrings {
char[] chars;
LinkedList<String> res;
public String[] permutation(String s) {
//回溯
this.chars = s.toCharArray();
this.res = new LinkedList<>();
traceBack(0, s.length());
return res.toArray(new String[0]);
}
void traceBack(int start, int end) {
if (start == end) {
res.add(new String(chars));
return;
}
boolean[] used = new boolean[128];//这里用的是字符的ascii码值 0-127
for (int i = start; i < end; i++) {
if (used[chars[i]]) continue;//重复的就不在交换了
used[chars[i]] = true;
swap(start, i);
traceBack(start + 1, end);
swap(start, i);
}
}
void swap(int start, int i) {
char temp = chars[start];
chars[start] = chars[i];
chars[i] = temp;
}
}