Skip to content

Commit 42a5bae

Browse files
committed
feat: add solutions to lc problem: No.0625
No.0625.Minimum Factorization
1 parent e030d3e commit 42a5bae

File tree

6 files changed

+227
-2
lines changed

6 files changed

+227
-2
lines changed

solution/0600-0699/0625.Minimum Factorization/README.md

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,105 @@
4242

4343
<!-- 这里可写通用的实现逻辑 -->
4444

45+
**方法一:贪心 + 因式分解**
46+
47+
我们先判断 $num$ 是否小于 $2$,如果是,直接返回 $num$。然后从 $9$ 开始,尽可能多地将数字分解为 $9$,然后分解为 $8$,以此类推,直到分解为 $2$。如果最后剩下的数字不是 $1$,或者结果超过了 $2^{31} - 1$,则返回 $0$。否则,我们返回结果。
48+
49+
> 注意,分解后的数字,应该依次填充到结果的个位、十位、百位、千位……上,因此我们需要维护一个变量 $mul$,表示当前的位数。
50+
51+
时间复杂度 $O(\log n)$,空间复杂度 $O(1)$。其中 $n$ 为 $num$ 的值。
52+
4553
<!-- tabs:start -->
4654

4755
### **Python3**
4856

4957
<!-- 这里可写当前语言的特殊实现逻辑 -->
5058

5159
```python
52-
60+
class Solution:
61+
def smallestFactorization(self, num: int) -> int:
62+
if num < 2:
63+
return num
64+
ans, mul = 0, 1
65+
for i in range(9, 1, -1):
66+
while num % i == 0:
67+
num //= i
68+
ans = mul * i + ans
69+
mul *= 10
70+
return ans if num < 2 and ans <= 2**31 - 1 else 0
5371
```
5472

5573
### **Java**
5674

5775
<!-- 这里可写当前语言的特殊实现逻辑 -->
5876

5977
```java
78+
class Solution {
79+
public int smallestFactorization(int num) {
80+
if (num < 2) {
81+
return num;
82+
}
83+
long ans = 0, mul = 1;
84+
for (int i = 9; i >= 2; --i) {
85+
if (num % i == 0) {
86+
while (num % i == 0) {
87+
num /= i;
88+
ans = mul * i + ans;
89+
mul *= 10;
90+
}
91+
}
92+
}
93+
return num < 2 && ans <= Integer.MAX_VALUE ? (int) ans : 0;
94+
}
95+
}
96+
```
97+
98+
### **C++**
99+
100+
```cpp
101+
class Solution {
102+
public:
103+
int smallestFactorization(int num) {
104+
if (num < 2) {
105+
return num;
106+
}
107+
long long ans = 0, mul = 1;
108+
for (int i = 9; i >= 2; --i) {
109+
if (num % i == 0) {
110+
while (num % i == 0) {
111+
num /= i;
112+
ans = mul * i + ans;
113+
mul *= 10;
114+
}
115+
}
116+
}
117+
return num < 2 && ans <= INT_MAX ? ans : 0;
118+
}
119+
};
120+
```
60121
122+
### **Go**
123+
124+
```go
125+
func smallestFactorization(num int) int {
126+
if num < 2 {
127+
return num
128+
}
129+
ans, mul := 0, 1
130+
for i := 9; i >= 2; i-- {
131+
if num%i == 0 {
132+
for num%i == 0 {
133+
num /= i
134+
ans = mul*i + ans
135+
mul *= 10
136+
}
137+
}
138+
}
139+
if num < 2 && ans <= math.MaxInt32 {
140+
return ans
141+
}
142+
return 0
143+
}
61144
```
62145

63146
### **...**

solution/0600-0699/0625.Minimum Factorization/README_EN.md

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,88 @@
2828
### **Python3**
2929

3030
```python
31-
31+
class Solution:
32+
def smallestFactorization(self, num: int) -> int:
33+
if num < 2:
34+
return num
35+
ans, mul = 0, 1
36+
for i in range(9, 1, -1):
37+
while num % i == 0:
38+
num //= i
39+
ans = mul * i + ans
40+
mul *= 10
41+
return ans if num < 2 and ans <= 2**31 - 1 else 0
3242
```
3343

3444
### **Java**
3545

3646
```java
47+
class Solution {
48+
public int smallestFactorization(int num) {
49+
if (num < 2) {
50+
return num;
51+
}
52+
long ans = 0, mul = 1;
53+
for (int i = 9; i >= 2; --i) {
54+
if (num % i == 0) {
55+
while (num % i == 0) {
56+
num /= i;
57+
ans = mul * i + ans;
58+
mul *= 10;
59+
}
60+
}
61+
}
62+
return num < 2 && ans <= Integer.MAX_VALUE ? (int) ans : 0;
63+
}
64+
}
65+
```
66+
67+
### **C++**
68+
69+
```cpp
70+
class Solution {
71+
public:
72+
int smallestFactorization(int num) {
73+
if (num < 2) {
74+
return num;
75+
}
76+
long long ans = 0, mul = 1;
77+
for (int i = 9; i >= 2; --i) {
78+
if (num % i == 0) {
79+
while (num % i == 0) {
80+
num /= i;
81+
ans = mul * i + ans;
82+
mul *= 10;
83+
}
84+
}
85+
}
86+
return num < 2 && ans <= INT_MAX ? ans : 0;
87+
}
88+
};
89+
```
3790
91+
### **Go**
92+
93+
```go
94+
func smallestFactorization(num int) int {
95+
if num < 2 {
96+
return num
97+
}
98+
ans, mul := 0, 1
99+
for i := 9; i >= 2; i-- {
100+
if num%i == 0 {
101+
for num%i == 0 {
102+
num /= i
103+
ans = mul*i + ans
104+
mul *= 10
105+
}
106+
}
107+
}
108+
if num < 2 && ans <= math.MaxInt32 {
109+
return ans
110+
}
111+
return 0
112+
}
38113
```
39114

40115
### **...**
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
int smallestFactorization(int num) {
4+
if (num < 2) {
5+
return num;
6+
}
7+
long long ans = 0, mul = 1;
8+
for (int i = 9; i >= 2; --i) {
9+
if (num % i == 0) {
10+
while (num % i == 0) {
11+
num /= i;
12+
ans = mul * i + ans;
13+
mul *= 10;
14+
}
15+
}
16+
}
17+
return num < 2 && ans <= INT_MAX ? ans : 0;
18+
}
19+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
func smallestFactorization(num int) int {
2+
if num < 2 {
3+
return num
4+
}
5+
ans, mul := 0, 1
6+
for i := 9; i >= 2; i-- {
7+
if num%i == 0 {
8+
for num%i == 0 {
9+
num /= i
10+
ans = mul*i + ans
11+
mul *= 10
12+
}
13+
}
14+
}
15+
if num < 2 && ans <= math.MaxInt32 {
16+
return ans
17+
}
18+
return 0
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int smallestFactorization(int num) {
3+
if (num < 2) {
4+
return num;
5+
}
6+
long ans = 0, mul = 1;
7+
for (int i = 9; i >= 2; --i) {
8+
if (num % i == 0) {
9+
while (num % i == 0) {
10+
num /= i;
11+
ans = mul * i + ans;
12+
mul *= 10;
13+
}
14+
}
15+
}
16+
return num < 2 && ans <= Integer.MAX_VALUE ? (int) ans : 0;
17+
}
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def smallestFactorization(self, num: int) -> int:
3+
if num < 2:
4+
return num
5+
ans, mul = 0, 1
6+
for i in range(9, 1, -1):
7+
while num % i == 0:
8+
num //= i
9+
ans = mul * i + ans
10+
mul *= 10
11+
return ans if num < 2 and ans <= 2**31 - 1 else 0

0 commit comments

Comments
 (0)