[Leetcode] 2729. Check if The Number is Fascinating (Easy)

概述

題目

https://leetcode.com/problems/check-if-the-number-is-fascinating/
給定一個數 n,計算 n, 2*n, n*3 的各位數字是否等於 1~9

心得

主要考的是 Set 與 len 的概念,但週賽時沒考慮到長度,出現可能有兩個數字都一樣的狀況而中箭落馬吃一次 WA

Counter or Set

思路

先生成一個 1~9 的 set,再分別將 n, n*2, n*3 也組成一個各位數字的 set,比對兩者是否相等及位數長度是否相等

程式

1
2
3
4
5
6
7
8
9
10
11
12
class Solution(object):
def isFascinating(self, n):
"""
:type n: int
:rtype: bool
"""
arr = set([i for i in range(1, 10)])
t = str(n) + str(n*2) + str(n*3)
nrr = set([int(c) for c in t])
if nrr == arr and len(t) == 9:
return True
return False

一行解, from Kyrylo-Ktl

1
2
3
4
5
6
7
class Solution(object):
def isFascinating(self, n):
"""
:type n: int
:rtype: bool
"""
return Counter(str(n)+str(n*2)+str(n*3)) == Counter("123456789")

Complexity

Time Complexity: O(1)
n 是 3 位數

Space Complexity: O(1)
n 是 3 位數

Sort

思路

透過排列是否相等也可以達到相同目的

程式

1
2
3
4
5
6
7
class Solution(object):
def isFascinating(self, n):
"""
:type n: int
:rtype: bool
"""
return sorted(str(n)+str(n*2)+str(n*3)) == sorted("123456789")

Complexity

Time Complexity: O(1)
雖然 sort 是 O(n log n),但最多 10 位故還是 O(1)

Space Complexity: O(1)
最多 10 位故 O(1)