diff --git a/solution/0600-0699/0625.Minimum Factorization/README.md b/solution/0600-0699/0625.Minimum Factorization/README.md index 431fdd749b49b..4dd61d3845271 100644 --- a/solution/0600-0699/0625.Minimum Factorization/README.md +++ b/solution/0600-0699/0625.Minimum Factorization/README.md @@ -42,6 +42,14 @@ +**方法一:贪心 + 因式分解** + +我们先判断 $num$ 是否小于 $2$,如果是,直接返回 $num$。然后从 $9$ 开始,尽可能多地将数字分解为 $9$,然后分解为 $8$,以此类推,直到分解为 $2$。如果最后剩下的数字不是 $1$,或者结果超过了 $2^{31} - 1$,则返回 $0$。否则,我们返回结果。 + +> 注意,分解后的数字,应该依次填充到结果的个位、十位、百位、千位……上,因此我们需要维护一个变量 $mul$,表示当前的位数。 + +时间复杂度 $O(\log n)$,空间复杂度 $O(1)$。其中 $n$ 为 $num$ 的值。 + ### **Python3** @@ -49,7 +57,17 @@ ```python - +class Solution: + def smallestFactorization(self, num: int) -> int: + if num < 2: + return num + ans, mul = 0, 1 + for i in range(9, 1, -1): + while num % i == 0: + num //= i + ans = mul * i + ans + mul *= 10 + return ans if num < 2 and ans <= 2**31 - 1 else 0 ``` ### **Java** @@ -57,7 +75,72 @@ ```java +class Solution { + public int smallestFactorization(int num) { + if (num < 2) { + return num; + } + long ans = 0, mul = 1; + for (int i = 9; i >= 2; --i) { + if (num % i == 0) { + while (num % i == 0) { + num /= i; + ans = mul * i + ans; + mul *= 10; + } + } + } + return num < 2 && ans <= Integer.MAX_VALUE ? (int) ans : 0; + } +} +``` + +### **C++** + +```cpp +class Solution { +public: + int smallestFactorization(int num) { + if (num < 2) { + return num; + } + long long ans = 0, mul = 1; + for (int i = 9; i >= 2; --i) { + if (num % i == 0) { + while (num % i == 0) { + num /= i; + ans = mul * i + ans; + mul *= 10; + } + } + } + return num < 2 && ans <= INT_MAX ? ans : 0; + } +}; +``` +### **Go** + +```go +func smallestFactorization(num int) int { + if num < 2 { + return num + } + ans, mul := 0, 1 + for i := 9; i >= 2; i-- { + if num%i == 0 { + for num%i == 0 { + num /= i + ans = mul*i + ans + mul *= 10 + } + } + } + if num < 2 && ans <= math.MaxInt32 { + return ans + } + return 0 +} ``` ### **...** diff --git a/solution/0600-0699/0625.Minimum Factorization/README_EN.md b/solution/0600-0699/0625.Minimum Factorization/README_EN.md index bd0bb6597293f..5a8f1fa47076e 100644 --- a/solution/0600-0699/0625.Minimum Factorization/README_EN.md +++ b/solution/0600-0699/0625.Minimum Factorization/README_EN.md @@ -28,13 +28,88 @@ ### **Python3** ```python - +class Solution: + def smallestFactorization(self, num: int) -> int: + if num < 2: + return num + ans, mul = 0, 1 + for i in range(9, 1, -1): + while num % i == 0: + num //= i + ans = mul * i + ans + mul *= 10 + return ans if num < 2 and ans <= 2**31 - 1 else 0 ``` ### **Java** ```java +class Solution { + public int smallestFactorization(int num) { + if (num < 2) { + return num; + } + long ans = 0, mul = 1; + for (int i = 9; i >= 2; --i) { + if (num % i == 0) { + while (num % i == 0) { + num /= i; + ans = mul * i + ans; + mul *= 10; + } + } + } + return num < 2 && ans <= Integer.MAX_VALUE ? (int) ans : 0; + } +} +``` + +### **C++** + +```cpp +class Solution { +public: + int smallestFactorization(int num) { + if (num < 2) { + return num; + } + long long ans = 0, mul = 1; + for (int i = 9; i >= 2; --i) { + if (num % i == 0) { + while (num % i == 0) { + num /= i; + ans = mul * i + ans; + mul *= 10; + } + } + } + return num < 2 && ans <= INT_MAX ? ans : 0; + } +}; +``` +### **Go** + +```go +func smallestFactorization(num int) int { + if num < 2 { + return num + } + ans, mul := 0, 1 + for i := 9; i >= 2; i-- { + if num%i == 0 { + for num%i == 0 { + num /= i + ans = mul*i + ans + mul *= 10 + } + } + } + if num < 2 && ans <= math.MaxInt32 { + return ans + } + return 0 +} ``` ### **...** diff --git a/solution/0600-0699/0625.Minimum Factorization/Solution.cpp b/solution/0600-0699/0625.Minimum Factorization/Solution.cpp new file mode 100644 index 0000000000000..9d73af440a6ec --- /dev/null +++ b/solution/0600-0699/0625.Minimum Factorization/Solution.cpp @@ -0,0 +1,19 @@ +class Solution { +public: + int smallestFactorization(int num) { + if (num < 2) { + return num; + } + long long ans = 0, mul = 1; + for (int i = 9; i >= 2; --i) { + if (num % i == 0) { + while (num % i == 0) { + num /= i; + ans = mul * i + ans; + mul *= 10; + } + } + } + return num < 2 && ans <= INT_MAX ? ans : 0; + } +}; \ No newline at end of file diff --git a/solution/0600-0699/0625.Minimum Factorization/Solution.go b/solution/0600-0699/0625.Minimum Factorization/Solution.go new file mode 100644 index 0000000000000..9c838f70b2506 --- /dev/null +++ b/solution/0600-0699/0625.Minimum Factorization/Solution.go @@ -0,0 +1,19 @@ +func smallestFactorization(num int) int { + if num < 2 { + return num + } + ans, mul := 0, 1 + for i := 9; i >= 2; i-- { + if num%i == 0 { + for num%i == 0 { + num /= i + ans = mul*i + ans + mul *= 10 + } + } + } + if num < 2 && ans <= math.MaxInt32 { + return ans + } + return 0 +} \ No newline at end of file diff --git a/solution/0600-0699/0625.Minimum Factorization/Solution.java b/solution/0600-0699/0625.Minimum Factorization/Solution.java new file mode 100644 index 0000000000000..f69c46992197b --- /dev/null +++ b/solution/0600-0699/0625.Minimum Factorization/Solution.java @@ -0,0 +1,18 @@ +class Solution { + public int smallestFactorization(int num) { + if (num < 2) { + return num; + } + long ans = 0, mul = 1; + for (int i = 9; i >= 2; --i) { + if (num % i == 0) { + while (num % i == 0) { + num /= i; + ans = mul * i + ans; + mul *= 10; + } + } + } + return num < 2 && ans <= Integer.MAX_VALUE ? (int) ans : 0; + } +} \ No newline at end of file diff --git a/solution/0600-0699/0625.Minimum Factorization/Solution.py b/solution/0600-0699/0625.Minimum Factorization/Solution.py new file mode 100644 index 0000000000000..d9e094553024c --- /dev/null +++ b/solution/0600-0699/0625.Minimum Factorization/Solution.py @@ -0,0 +1,11 @@ +class Solution: + def smallestFactorization(self, num: int) -> int: + if num < 2: + return num + ans, mul = 0, 1 + for i in range(9, 1, -1): + while num % i == 0: + num //= i + ans = mul * i + ans + mul *= 10 + return ans if num < 2 and ans <= 2**31 - 1 else 0