leetcode 59. 插入区间 60. 排列序列

leetcode 59. 插入区间 60. 排列序列

59. 螺旋矩阵 II

难度中等541收藏分享切换为英文接收动态反馈

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

示例 1:

img

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

提示:

  • 1 <= n <= 20

通过次数140,965

提交次数179,683

# -*- coding: utf-8 -*-
# !/usr/bin/env python
# @Author  : mtl
# @Desc    : ***
# @File    : 59.py
# @Software: PyCharm
from typing import List


class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        total = n * n
        direction = [[0, 1], [1, 0], [0, -1], [-1, 0]]
        i = 0
        matrix = [[False for _ in range(n)] for _ in range(n)]
        num = 0
        row, col = 0, 0
        while i < total:
            matrix[row][col] = i + 1
            row, col = row + direction[num][0], col + direction[num][1]
            if (row >= n or row < 0) or \
                    (col >= n or col < 0) or matrix[row][col] != False:
                row, col = row - direction[num][0], col - direction[num][1]
                num += 1
                if num >= len(direction):
                    num = 0
                row, col = row + direction[num][0], col + direction[num][1]
            i += 1
        return matrix

if __name__ == '__main__':
    n = 4
    print(Solution().generateMatrix(n))
60. 排列序列

难度困难603收藏分享切换为英文接收动态反馈

给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

给定 nk,返回第 k 个排列。

示例 1:

输入:n = 3, k = 3
输出:"213"

示例 2:

输入:n = 4, k = 9
输出:"2314"

示例 3:

输入:n = 3, k = 1
输出:"123"

提示:

  • 1 <= n <= 9
  • 1 <= k <= n!

通过次数94,360

提交次数179,415

# -*- coding: utf-8 -*-
# !/usr/bin/env python
# @Author  : mtl
# @Desc    : ***
# @File    : 60.py
# @Software: PyCharm
class Solution:
    def getPermutation(self, n: int, k: int) -> str:
        nlist = [str(i+1) for i in range(n)]
        result_list = []
        valid = False
        def dfs(nlist, n, alist):
            nonlocal result_list, k, valid
            if n <= 2:
                result_list.append(alist + [nlist[0], nlist[1]])
                result_list.append(alist + [nlist[1], nlist[0]])
                if len(result_list) > k:
                    valid = True
                return
            for i in range(len(nlist)):
                lnlist = nlist.copy()
                alist.append(nlist.pop(i))
                dfs(nlist, n - 1, alist)
                if valid:
                    return
                nlist = lnlist
                alist.pop()
        if n == 1:
            return "1"
        dfs(nlist, n, [])
        return "".join(result_list[k - 1])

    def getPermutation(self, n: int, k: int) -> str:
        factorial = [1]
        for i in range(1,n):
            factorial.append(factorial[-1] * i)
        a = [1] * (n + 1)
        k -= 1
        ans = ""
        for i in range(1,n+1):
            order = k // factorial[n - i] + 1
            for j in range(1,n+1):
                order -= a[j]
                if order == 0:
                    ans += str(j)
                    a[j] = 0
                    break
            k %= factorial[n - i]
        return ans



if __name__ == '__main__':
    n = 4
    k = 9
    a = [1,2,3]
    b = [2,3]
    # print(b.pop(1))
    print(Solution().getPermutation(n, k))
[n - i]
        return ans



if __name__ == '__main__':
    n = 4
    k = 9
    a = [1,2,3]
    b = [2,3]
    # print(b.pop(1))
    print(Solution().getPermutation(n, k))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mtl1994

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值