1. 59——螺旋矩阵2
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
标签:数组,矩阵,模拟
代码:
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
matrix = []
for i in range(n):
matrix.append([0] * n)
top = 0
bottom = n - 1
left = 0
right = n - 1
num = 1
while num <= n*n:
for i in range(left, right + 1):
matrix[top][i] = num
num = num + 1
top = top + 1
for i in range(top, bottom + 1):
matrix[i][right] = num
num = num + 1
right = right - 1
for i in range(right, left - 1, -1):
matrix[bottom][i] = num
num = num + 1
bottom = bottom - 1
for i in range(bottom, top - 1, -1):
matrix[i][left] = num
num = num + 1
left = left + 1
return matrix
2. 60——排列序列
给出集合 [1,2,3,...,n]
,其所有元素共有 n!
种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3
时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n
和 k
,返回第 k
个排列。
标签:递归,数学
代码:
class Solution:
def getPermutation(self, n: int, k: int) -> str:
def fun(nums):
n = len(nums) - 1
while n > 0:
if nums[n - 1] > nums[n]:
n = n - 1
else:
break
idx1 = n - 1
num1 = nums[idx1]
n = len(nums) - 1
while n > idx1:
if nums[n] < num1:
n = n - 1
else:
break
idx2 = n
num2 = nums[idx2]
nums[idx1], nums[idx2] = num2, num1
left = idx1 + 1
right = len(nums) - 1
while left < right:
nums[left], nums[right] = nums[right], nums[left]
left = left + 1
right = right - 1
return nums
nums = []
res = ""
for i in range(n):
nums.append(i + 1)
i = 1
while i < k:
nums = fun(nums)
i = i + 1
for i in nums:
res = res + str(i)
return res
3. 61——旋转链表
给你一个链表的头节点 head
,旋转链表,将链表每个节点向右移动 k
个位置。
标签:链表,双指针
代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
pointer = head
leng = 0
while pointer:
leng = leng + 1
pointer = pointer.next
if leng == 0 or leng == 1:
return head
if k == 0 or k % leng == 0:
return head
k = k % leng # 向右移动k次,对应倒数第k个结点会是新的头结点
pointer = head
while k:
pointer = pointer.next
k = k - 1
pointer1 = head
while pointer.next:
pointer1 = pointer1.next
pointer = pointer.next
res = pointer1.next
pointer1.next = None
pointer.next = head
return res