File tree Expand file tree Collapse file tree 6 files changed +227
-2
lines changed
solution/0600-0699/0625.Minimum Factorization Expand file tree Collapse file tree 6 files changed +227
-2
lines changed Original file line number Diff line number Diff line change 42
42
43
43
<!-- 这里可写通用的实现逻辑 -->
44
44
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
+
45
53
<!-- tabs:start -->
46
54
47
55
### ** Python3**
48
56
49
57
<!-- 这里可写当前语言的特殊实现逻辑 -->
50
58
51
59
``` 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
53
71
```
54
72
55
73
### ** Java**
56
74
57
75
<!-- 这里可写当前语言的特殊实现逻辑 -->
58
76
59
77
``` 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
+ ```
60
121
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
+ }
61
144
```
62
145
63
146
### ** ...**
Original file line number Diff line number Diff line change 28
28
### ** Python3**
29
29
30
30
``` 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
32
42
```
33
43
34
44
### ** Java**
35
45
36
46
``` 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
+ ```
37
90
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
+ }
38
113
```
39
114
40
115
### ** ...**
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments