leetcode刷题记录

46 全排列

import copy

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        ret=[]
        track=[]
        self.backtrack(nums,track,ret)
        return ret
        
    def backtrack(self,nums,track,ret):
        if(len(nums)==len(track)):
            ret.append(copy.deepcopy(track))
            return
        
        for i in range(len(nums)):
            if(nums[i] in track):
                continue
            else:
                track.append(nums[i])
                self.backtrack(nums,track,ret)
                track.pop(len(track)-1)
        return

            
            
                

77 组合

import copy

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        ret=[]
        track=[]
        self.backtrack(ret,track,1,n,k)
        return ret
    
    def backtrack(self,ret,track,start,n,k):
        if(len(track)==k):
            ret.append(copy.deepcopy(track))
            return
        for i in range(start,n+1):
            track.append(i)
            self.backtrack(ret,track,i+1,n,k)
            track.pop(len(track)-1)
        return

78 子集

数学归纳法:

import copy

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        l=len(nums)
        if(l==0):
            return [[]]
        end=nums.pop(l-1)
        ret=self.subsets(nums)
        for i in range(len(ret)):
            ret.append(copy.deepcopy(ret[i]))
            ret[len(ret)-1].append(end)
        return ret

回溯算法:

import copy

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        res=[]
        track=[]
        self.backtrack(nums,0,track,res)
        return res
    
    def backtrack(self,nums,start,track,res):
        res.append(copy.deepcopy(track))
        for i in range(start,len(nums)):
            track.append(nums[i])
            self.backtrack(nums,i+1,track,res)
            track.pop(len(track)-1)
        return

94 二叉树的中序遍历

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        def recur(self,ret,root):
            if(root==None):
                return
            recur(self,ret,root.left)
            ret.append(root.val)
            recur(self,ret,root.right)
            return
        ret=[]
        recur(self,ret,root)
        return ret

136 只出现一次的数字

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        ret=0
        for item in nums:
            ret^=item
        return ret

191 位1的个数

class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """
        ret=0
        while(n>0):
            n=n&(n-1)
            ret=ret+1
        return ret

231 2的幂

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if(n<=0):
            return False
        return (n&(n-1))==0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值