题解 | #字符串的排列#

字符串的排列

https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7

package main
import "strings"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param str string字符串 
 * @return string字符串一维数组
*/
var res []string
var chars []string
func Permutation( str string ) []string {
    // write code here
    chars = strings.Split(str, "")
	dfs(0)
	return res
}


func dfs(start int) {
	//遍历到结尾
	if start == len(chars)-1 {
		//将切片转为string
		res = append(res, strings.Join(chars, ""))
		return
	}
	existMap := make(map[string]int, 0)
	for i := start; i < len(chars); i++ {
		//同一层递归中,存在相同的字符,跳过
		if _, ok := existMap[chars[i]]; ok {
			continue
		}
		//记录字符
		existMap[chars[i]] = 1
		//交换字符
		swap(i, start)
		//递归
		dfs(start + 1)
		//恢复交换的字符
		swap(start, i)
	}
}

func swap(i, j int) {
	tmp := chars[i]
	chars[i] = chars[j]
	chars[j] = tmp
}

全部评论

相关推荐

如题,只有过一段小厂实习经历,秋招会很吃亏吗?
KarlAllen:我也没大厂实习。今年大厂又扩招实习生。不知道秋招要怎么办了
点赞 评论 收藏
分享
自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务