博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode题解(1175):质数排列(Python)
阅读量:1899 次
发布时间:2019-04-26

本文共 1315 字,大约阅读时间需要 4 分钟。

题目:(简单)

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N ) O(N) O(N) O ( N ) O(N) O(N) 44ms (57.83%)
Ans 2 (Python) O ( N ) O(N) O(N) O ( N ) O(N) O(N) 40ms (83.48%)
Ans 3 (Python)

LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执行用时一般都在同一个量级,仅作参考意义。

解法一:

def numPrimeArrangements(self, n: int) -> int:    def countPrimes(k: int) -> int:        if k < 2:            return 0        num_list = [True] * k        num_list[0], num_list[1] = False, False        for i in range(2, int(pow(k, 0.5)) + 1):            if num_list[i]:                num_list[i * i::i] = [False] * ((k - i * i - 1) // i + 1)        return sum(num_list)    prime_num = countPrimes(n + 1)    other_num = n - prime_num    ans = 1    for i in range(1, prime_num + 1):        ans *= i        ans = ans % (10 ** 9 + 7)    for i in range(1, other_num + 1):        ans *= i        ans = ans % (10 ** 9 + 7)    return ans

解法二(不但维护了质数表,还二分查找…):

def numPrimeArrangements(self, n: int) -> int:    primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]    prime_num = bisect.bisect_left(primes, n)    other_num = n - prime_num    ans = 1    for i in range(1, prime_num + 1):        ans *= i        ans = ans % (10 ** 9 + 7)    for i in range(1, other_num + 1):        ans *= i        ans = ans % (10 ** 9 + 7)    return ans

转载地址:http://bqgdf.baihongyu.com/

你可能感兴趣的文章
查看linux是32位还是64位
查看>>
ffmpeg
查看>>
XCode编译器介绍
查看>>
X86汇编语言从实模式到保护模式14:用户程序编程接口及其实现
查看>>
SystemC自带example的simple_perf研习
查看>>
SystemC自带example的rsa研习
查看>>
Python实用小技巧
查看>>
美科学家研发BIC-TCP协议 速度是DSL六千倍
查看>>
AIDL使用注意
查看>>
SDL以及扩展库的交叉编译过程简介
查看>>
SDL arm linux平台交叉编译(好文章已测试)
查看>>
linux 常用查看设备命令
查看>>
Linux内核及文件系统配置编译 - 关于内核配置
查看>>
android应用前期开发之经验总结
查看>>
Linux 下zip包的压缩与解压
查看>>
Andoird SDK目录解析
查看>>
Google Guava官方教程(中文版)
查看>>
Guava教程
查看>>
The Book of QT4 翻译:1.2 布局,对象层级和内存管理
查看>>
麒麟信安UniKylin3.3安装配置pyqt5运行环境
查看>>