python习题 LeetCode练习题

119 杨辉三角

class Solution(object):
    def getRow(self, rowIndex):
        #创建二维数组 li ,其中包含rowIndex+1 行,每一行都包含一个列表,该列表只有一个元素1,
        #所以最终的列表li是包含了rowIndex+1个子列表的二维列表,每个子列表只包含一个元素
        li=[[1] for _ in range(rowIndex+1)]
        #行遍历
        for i in range(1,rowIndex+1):
            for j in range(1,i+1):
                if j !=i:
                    #新的一行某一位是前一行同一位置加上前一位置的和,这个地方要从后往前加
                  li[i].append(li[i-1][j-1]+li[i-1][j])
                else:
                    li[i].append(1)
        return li[rowIndex]

另解

class Solution(object):
    def getRow(self, rowIndex):
        #创建了一个名为dp的列表,长度为rowIndex+1
        #表中每个元素初始化为0,
        dp=[0]*(rowIndex+1)
        dp[0]=1
        for idx in range(1,rowIndex+1):
            #逆序遍历从idx开始
            for i in range(idx,0,-1):
                dp[i]=dp[i-1]+dp[i]
        return dp

另解

class Solution(object):
    def getRow(self, rowIndex):
        def helper(times, box):
            if times == rowIndex:
                return box
            if len(box) == 1:
                box = [1,1]
                return helper(times+1, box)
            else:
                new = []
                for i in range(len(box)):
                    if i == 0:
                        new.append(box[0])
                    elif i > 0 :
                        new.append(box[i] + box[i-1])
                    if i == len(box)-1:
                        new.append(box[i])
                return helper(times+1, new)
        return helper(0, [1])

  

另解

class Solution(object):
    def getRow(self, rowIndex):
        dp = [[0]*(rowIndex+1) for _ in range(rowIndex+1)]
        dp[0][0] = 1
        for i in range(1, rowIndex+1):
            for j in range(rowIndex+1):
                if j == 0:
                    dp[i][j] = dp[i-1][j]
                elif j == rowIndex:
                    dp[i][j] = dp[i-1][j-1]
                else:
                    dp[i][j] = dp[i-1][j] + dp[i-1][j-1]
        return dp[rowIndex]

27移除元素

class Solution(object):
    def removeElement(self, nums, val):
        count=0
        for idx ,i in enumerate(nums):
            if i==val:
                #记录多少个
                count+=1
            else:
                #往前赋值
                nums[idx-count]=nums[idx]
        return len(nums)-count

202快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

代码

测试用例

测试用例

测试结果

202. 快乐数

已解答

简单

相关标签

相关企业

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:

输入:n = 2
输出:false

提示:

  • 1 <= n <= 231 - 1
class Solution(object):
    def isHappy(self, n):
        li=[n];
        while True:
            #分开每个位置上的数字
            num=map(int ,str(li[-1]))
            result=0
            for i in num:
                result +=i**2
            if result==1:
                return True
            else:
                #如果在数组里就跳出循环
                if result in li:
                    break
                #不在就添加进去
                else:
                    li.append(result)
        return False
               
        
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值