每次五个题~

题目来源请使用https://leetcode-cn.com/

1313.解压缩编码列表

给你一个以行程长度编码压缩的整数列表 nums 。

考虑每相邻两个元素 [a, b] = [nums[2*i], nums[2*i+1]] (其中 i >= 0 ),每一对都表示解压后有 a 个值为 b 的元素。

请你返回解压后的列表。

输入:nums = [1,2,3,4]
输出:[2,4,4,4]

思路:

  1. 什么是行程长度编码;

​ 例如AAAADDD可以压缩为4A3D。

  1. 对输入数组每次步进 2 值进行取值

我的解法:

class Solution:
  def decompressRLElist(self, nums: List[int]) -> List[int]:
        new = []
        for i in range(0, len(nums), 2):
         j = nums[i]
         while j > 0: 
                 j = j - 1
                 new.append(nums[i + 1])
     return new

更好的解法:

class Solution:
    def decompressRLElist(self, nums: List[int]) -> List[int]:
        decompress = []
        for i in range(1, len(nums), 2):
            decompress += [nums[i],] * nums[i-1]
        return decompress

LCP 1. 猜数字

小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?

输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3。

示例1:

输入:guess = [1,2,3], answer = [1,2,3]
输出:3
解释:小A 每次都猜对了。

思路:

循环或者枚举三次list的值进行比较即可

我的解法:

class Solution:
    def game(self, guess: List[int], answer: List[int]) -> int:
        roundwin = 0
        for i in range(3):
              if guess[i] == answer[i]:
                  roundwin += 1
        return roundwin

或者?:

return sum(guess[i]==answer[i] for i in range(len(guess)))

1295. 统计位数为偶数的数字

给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。

示例 1:

输入:nums = [12,345,2,6,7896]
输出:2
解释:
12 是 2 位数字(位数为偶数) 
345 是 3 位数字(位数为奇数)  
2 是 1 位数字(位数为奇数) 
6 是 1 位数字(位数为奇数)
7896 是 4 位数字(位数为偶数)  
因此只有 12 和 7896 是位数为偶数的数字

思路:

枚举数组中的整数,以此判断x是否包含偶数个数字

将整数转换为字符串,用len函数获取str的长度

我的解法:

class Solution:
    def findNumbers(self, nums: List[int]) -> int:
        return sum(1 for num in nums if len(str(num)) % 2 == 0)

771. 宝石与石头

给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。

示例 1:

输入: J = "aA", S = "aAAbbbb"
输出: 3

思路:

遍历每一块石头检查是不是宝石

我的解法:

class Solutions:    
      def numJewelsInStones(self, J, S):
        count = 0
        length_J = len(J)
        for i in range(length_J):
            count += S.count(J[i])
        return count

?解法:

将stone存入字典,用J进行查询

      dic = dict()
      for i in S:
              dic[i] = dic.get(i, 0) + 1
      sum = 0
      for i in range(len(J)):
              if J[i] in S:
              sum+=dic[J[i]]
      return sum    

1281. 整数的各位积和之差

给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。

示例

输入:n = 234
输出:15 
解释:
各位数之积 = 2 * 3 * 4 = 24 
各位数之和 = 2 + 3 + 4 = 9 
结果 = 24 - 9 = 15

思路:

将取出各位数字进行计算即可

解法将n转化为str方便取值,但是花费了更多的内存空间,不可取

class Solution:
    def subtractProductAndSum(self, n: int) -> int:
        n_str = str(n)
        length = len(n_str)
        sum = 0
        G = 1
        for i in range(length):
            sum += int(n_str[i])
            G *= int(n_str[i])
        return G - sum

更好的解法:

class Solution:
    def subtractProductAndSum(self, n: int) -> int:
        add, mul = 0, 1
        while n > 0:
            digit = n % 10
            n //= 10
            add += digit
            mul *= digit
        return mul - add
class Solution:
    def subtractProductAndSum(self, n: int) -> int:
        nList = list(str(n))
        a,b = 1,0
        for i in nList:
            a *= int(i)
            b += int(i)
        return a-b
最后修改:2020 年 02 月 13 日 11 : 51 PM
如果觉得我的文章对你有用,请随意赞赏