var IntMax =int(^uint(0)>>1)var IntMin =^IntMax
funcsubsets(nums []int)[][]int{
ret :=make([][]int,0)iflen(nums)==0{return ret
}
tmpRet :=make([]int,0)
ret =subsetsBackTracking(tmpRet, nums, ret)return ret
}funcsubsetsBackTracking(tmpRet []int, tmpNums []int, ret [][]int)[][]int{
ret =append(ret, tmpRet)var pre = IntMin
iflen(tmpRet)>0{
pre = tmpRet[len(tmpRet)-1]}for index, num :=range tmpNums{if num > pre{
newRet :=make([]int,0)
newRet =append(newRet, tmpRet...)
newRet =append(newRet, num)
newNums :=make([]int,0)
newNums =append(newNums, tmpNums...)
newNums =append(newNums[0:index], newNums[index+1:]...)
ret =subsetsBackTracking(newRet, newNums, ret)}}return ret
}