题目描述
题目示例
自己思路
1.对数组进行全排列,写出所有的可能
2.进行nums判断,如果nums是位于全排列最后一个,则直接返回全排列第一个数组;若不是则按照全排列继续
难点:不会如何全排列
力扣思路
力扣代码
class Solution:
def nextPermutation(self, nums):
n = len(nums)
k = n - 1
while k - 1 >= 0 and nums[k - 1] >= nums[k]:
k -= 1
if k == 0:
self.reverse(nums, 0, n - 1)
else:
u = k
while u + 1 < n and nums[u + 1] > nums[k - 1]:
u += 1
self.swap(nums, k - 1, u)
self.reverse(nums, k, n - 1)
def reverse(self, nums, a, b):
l, r = a, b
while l < r:
self.swap(nums, l++, r--)
def swap(self, nums, a, b):
c = nums[a]
nums[a] = nums[b]
nums[b] = c
知识积累
按位与
按位与是一种位运算符,用于计算两个二进制数的每一位。如果两个二进制数的某一位都为 1,那么结果的对应位也为 1;否则结果的对应位为 0。按位与通常用于处理二进制字符串、数字和布尔值。在 Python 中,按位与可以使用 & 运算符或 bitwise_and 函数实现。
逻辑与
逻辑与是一种逻辑运算符,用于计算两个逻辑表达式的真假。如果两个逻辑表达式都为真,那么结果为真;否则结果为假。逻辑与通常用于处理逻辑值(如布尔值)和比较两个条件。在 Python 中,逻辑与可以使用 and 运算符实现。