38.字符串的排列

字符串的排列

http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7

写这段代码的时候就是不知道在哪里写递归函数,一开始写的是res.append(head+self.Permutation(shadow)),果然递归就是一看就会一写就废

class Solution:
    def Permutation(self, ss):
        # write code here
        if len(ss) == 0:
            return []
        if len(ss) == 1:
            return ss
        res = []
        for i in range(len(ss)):
            head = ss[i]
            shadow = ss[:i]+ss[i+1:]
            for j in self.Permutation(shadow):
                res.append(head + j)
        return sorted(list(set(res)))
  • 一种更好理解的方法:
    class Solution:
      def Permutation(self, ss):
          # write code here
          if not ss:
              return []
          res = []
          def backtrack(nums, tmp):
              if not nums:
                  res.append(tmp)
                  return 
              for i in range(len(nums)):
                  backtrack(nums[:i] + nums[i+1:], tmp + nums[i])
          backtrack(ss, '')
          return sorted(list(set(res)))

leetcode两道道相似的题:
(全排列)https://leetcode-cn.com/problems/permutations/
(电话号码的组合):https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/

全部评论
len(nums)=1的时候nums[:i] + nums[i+1:]为啥不会越界呀
点赞 回复 分享
发布于 2021-07-30 08:59

相关推荐

浩鲸云计算 java开发 每月11k,总包14w
点赞 评论 收藏
分享
10-25 02:13
门头沟学院 C++
牛客7351937293号:8.27笔试10.22评估
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
9 3 评论
分享
牛客网
牛客企业服务