給定乙個陣列,將陣列中的元素向右移動 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...