55. &134 Jump Game

2018-03-07  本文已影响0人  Jonddy
题目要求:

一个数组存储了非负整形数据,数组中的第 i 个元素num[i],代表了可以从数组第i个位置最多向前跳跃nums[i]步;求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置。

Examples:

A = [2,3,1,1,4], return true.

A = [3,2,1,0,4], return false.

A = [3,3,1,0,4], return true.

解题思路:
代码:
class Solution(object):
    def canJump(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        index = []   #计算最远可以跳至的位置
        for i in range(len(nums)):
            index.append(i + nums[i])

        jump = 0   #代表已经走过的步数
        max_index = index[0]   #目前允许到大的最远的地方
        while jump < len(index) and jump <= max_index:  #直到jump跳跃到数组尾部或者junp超越了当前可以跳的最远位置
            if max_index < index[jump]:
                max_index = index[jump]
            jump += 1

        if jump == len(index):
            return True
        else:
            return False


    def canJumptwo(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        reach = 0
        for i, length in enumerate(nums):
            if i > reach:
                break
            reach = max(reach, i + length)

        return reach >= len(nums) - 1


if __name__ == "__main__":

    print(Solution.canJumptwo(self= None, nums = [1, 1, 1, 1, 2, 0]))
    def canJumptwo(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        reach = 0
        for i, length in enumerate(nums):
            if i > reach:
                break
            reach = max(reach, i + length)

        return reach >= len(nums) - 1

python 内置函数:

枚举(enumerate)是Python内置函数。它的用处很难在简单的一行中说明,但是大多数的新人,甚至一些高级程序员都没有意识到它。

a = [1,1,1,1,2,2,1,0,0,3]
for counter, val in enumerate(a):
    print(counter, val)

#结果是:
0 1
1 1
2 1
3 1
4 2
5 2
6 1
7 0
8 0
9 3
for counter, val in enumerate(a, 1):
    print(counter, val)

#结果是:
1 1
2 1
3 1
4 1
5 2
6 2
7 1
8 0
9 0
10 3
counter_list = list(enumerate(a, 1))
print(counter_list)

#结果是:
[(1, 1), (2, 1), (3, 1), (4, 1), (5, 2), (6, 2), (7, 1), (8, 0), (9, 0), (10, 3)]
上一篇 下一篇

猜你喜欢

热点阅读