python--leetcode682. Baseball Game

来源:互联网 发布:拜占庭东罗马知乎 编辑:程序博客网 时间:2024/06/06 00:06

You're now a baseball game point recorder.

Given a list of strings, each string can be one of the 4 following types:

  1. Integer (one round's score): Directly represents the number of points you get in this round.
  2. "+" (one round's score): Represents that the points you get in this round are the sum of the last two valid round's points.
  3. "D" (one round's score): Represents that the points you get in this round are the doubled data of the last valid round's points.
  4. "C" (an operation, which isn't a round's score): Represents the last valid round's points you get were invalid and should be removed.

Each round's operation is permanent and could have an impact on the round before and the round after.

You need to return the sum of the points you could get in all the rounds.

Example 1:

Input: ["5","2","C","D","+"]Output: 30Explanation: Round 1: You could get 5 points. The sum is: 5.Round 2: You could get 2 points. The sum is: 7.Operation 1: The round 2's data was invalid. The sum is: 5.  Round 3: You could get 10 points (the round 2's data has been removed). The sum is: 15.Round 4: You could get 5 + 10 = 15 points. The sum is: 30.

Example 2:

Input: ["5","-2","4","C","D","9","+","+"]Output: 27Explanation: Round 1: You could get 5 points. The sum is: 5.Round 2: You could get -2 points. The sum is: 3.Round 3: You could get 4 points. The sum is: 7.Operation 1: The round 3's data is invalid. The sum is: 3.  Round 4: You could get -4 points (the round 3's data has been removed). The sum is: -1.Round 5: You could get 9 points. The sum is: 8.Round 6: You could get -4 + 9 = 5 points. The sum is 13.Round 7: You could get 9 + 5 = 14 points. The sum is 27.

这一题的意思看起来比较繁琐,劝同学们好好看看英文原题和example理解一下意思。

意思就是如果输入的列表里某元素是数字的话,就一切正常。如果该元素为“C”,那么上一个数字元素失效。如果该元素为”D”,那么等于输入一个上一个有效数字的两倍的数字。如果该元素为“+”,那么等于输入一个上两个有效数字之和的数字。

解题思路无非就是各种条件去做判断,并设一个辅助数组b来做标记。同样下标若为1说明数字有效,若为0说明无效。

class Solution(object):    def calPoints(self, ops):        """        :type ops: List[str]        :rtype: int        """        b=[1 for i in range(len(ops))]        for i in range(len(ops)):            if ops[i]=="C" :                b[i]=0                j=i                while b[j]==0:                    j=j-1                b[j]=0            if ops[i] == "D":                j=i-1                while b[j]==0:                    j=j-1                ops[i]=2*int(ops[j])            if ops[i]=="+":                j = i - 1                while b[j] == 0:                    j = j - 1                k=j-1                while b[k] == 0:                    k = k - 1                ops[i]=int(ops[j])+int(ops[k])        sum=0        for i in range(len(ops)):            if b[i]==1:sum=sum+int(ops[i])        return sums=Solution()s.calPoints(["5","2","9",'C',"+",'D'])
因为我之前是写C的,所以语言方面用得比较底层,比较少去调用python的各种包或是列表操作。

下面上一个代码,求和的另一种思路:

    def calPoints(self, ops):        point_list = []        for op in ops:            if op == '+':                point_list.append(sum(point_list[-2:]))            elif op == 'C':                if point_list:                    del point_list[-1]            elif op == 'D':                if point_list:                    point_list.append(point_list[-1] * 2)            else:                point_list.append(int(op))        return sum(point_list)
应该不难看懂,就不讲解了。


原创粉丝点击