给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
思路:利用递归,"形成树形图"
var sonset [][]int func subsets(nums []int) [][]int { if len(nums)==0{ return [][]int{[]int{}} }else{ get_val([]int{},nums,0,len(nums)) sonset = append(sonset,[]int{}) } return sonset } func get_val(now,nums []int,intger,length int){ for i:=intger;;i++ { if i+1 > length{ return } new_sonset_em := make_sonset_em(now,nums[i]) sonset = append(sonset,new_sonset_em) get_val(new_sonset_em,nums,i+1,length) } } func make_sonset_em(now []int,val int)[]int { return append(now,val) }
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
思路:创建一个记录每一个不同字符的 第一次出现的位置 和 出现次数 的 映射 ,然后遍历筛选出 出现次数为1且最早出现的元素 位置
type Locate_num struct { Locate int //表示第一次出现的位置 Num int //表示总共出现的次数 } var one_char map[uint8]*Locate_num func firstUniqChar(s string) int { one_char :=make(map[uint8]*Locate_num,len(s)) first :=len(s) if len(s)==0{ return -1 }else{ //创建映射 one_char[s[0]]=&Locate_num{0,1} for i:=1;i<len(s);i++ { _,ok := one_char[s[i]] if ok { one_char[s[i]].Num++ }else{ one_char[s[i]]=&Locate_num{i,1} } } } for _,val :=range one_char { //筛选 if val.Num==1&&first>val.Locate{ first=val.Locate } } if first==len(s) { first=-1 } return first }