LeetCode使用Python實現旋轉陣列

2021-09-03 05:15:03 字數 1413 閱讀 5646

給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。

輸入: [1,2,3,4,5,6,7] 和 k = 3

輸出: [5,6,7,1,2,3,4]

解釋:向右旋轉 1 步: [7,1,2,3,4,5,6]

向右旋轉 2 步: [6,7,1,2,3,4,5]

向右旋轉 3 步: [5,6,7,1,2,3,4]

輸入: [-1,-100,3,99] 和 k = 2

輸出: [3,99,-1,-100]

解釋:

向右旋轉 1 步: [99,-1,-100,3]

向右旋轉 2 步: [3,99,-1,-100]

廢話少說直接上**:
class solution:

def rotate(self, nums, k):

""":type nums: list[int]

:type k: int

:rtype: void do not return anything, modify nums in-place instead.

"""# 法一:

# l = len(nums)

# k = k % l

# nums[:] = nums[l-k:] + nums[:l-k]

# 法二:

# l = len(nums)

# k = k % l

# nums[:l-k] = reversed(nums[:l-k])

# nums[l-k:] = reversed(nums[l-k:])

# nums[:] = reversed(nums)

# 法三:

def rev(start, end, nums):

while start < end:

nums[start], nums[end] = nums[end], nums[start]

start += 1

end -= 1

l = len(nums)

k = k % l

rev(0, l-k-1, nums)

rev(l-k, l-1, nums)

rev(0, l-1, nums)

總結:

第一種方法是直接將原陣列做切片處理,然後原地拼接。

第二種方法是使用python內建函式reversed將陣列進行反轉,根據旋轉陣列的特點,我們可以事先對元素組的切片部分分別進行反轉,最後對整個陣列進行反轉,即可達到翻轉的效果。

第三種方法實際上與第二種方法異曲同工,第二種方法的python內建函式reversed有返回值,並不是在原陣列上進行操作,在第三種方法中,我們自己實現了反轉功能的函式rev,這樣我們可以直接原地進行陣列的反轉。

leetcode 字母異位詞分組(python)

題目 給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。注意 需熟悉字典的相關使用方法 class so...

leetcode 200 島嶼數量 python

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1示例 2 輸入 11000 11...

leetcode 字母異位詞分組 python3

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。python中使用 字典 維護乙個分組表,鍵值 key...