文章目錄
打卡第五天~
題目描述
思路 && 代碼
- DFS + 輔助訪問數組 + Set 減枝
- 通過 Set 實現去重
class Solution {Set<String> res
= new HashSet<>();char[] arr
;boolean[] visited
;public String[] permutation(String s
) {arr
= s
.toCharArray();visited
= new boolean[arr
.length
];dfs(new StringBuilder());return res
.toArray(new String[0]);}public void dfs(StringBuilder s
) {if(s
.length() == arr
.length
) {res
.add(s
.toString());return;}Set<Character> set
= new HashSet<>();for(int i
= 0; i
< arr
.length
; i
++) {if(!visited
[i
]) {visited
[i
] = true;if(!set
.contains(arr
[i
])) {dfs(s
.append(arr
[i
]));set
.add(arr
[i
]);s
.delete(s
.length() - 1, s
.length());}visited
[i
] = false;}}}
}
二刷
class Solution {Set<String> set
= new HashSet<>();boolean[] visited
;char[] arr
;public String[] permutation(String s
) {visited
= new boolean[s
.length()];arr
= s
.toCharArray();dfs(new StringBuilder());return set
.toArray(new String[0]);}void dfs(StringBuilder sb
) {if(sb
.length() == arr
.length
) {set
.add(sb
.toString());}for(int i
= 0; i
< arr
.length
; i
++) {if(!visited
[i
]) {visited
[i
] = true;sb
.append(arr
[i
]);dfs(sb
);sb
.deleteCharAt(sb
.length() - 1);visited
[i
] = false;}}}
}
總結
以上是生活随笔為你收集整理的【LeetCode笔记】剑指 Offer 38. 字符串的排列(Java、字符串、DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。