60
60
61
61
<!-- 这里可写通用的实现逻辑 -->
62
62
63
+ ** 方法一:贪心**
64
+
65
+ 从左到右遍历字符串 ` num ` ,找到第一个比 ` change ` 中对应数字小的数字,然后将其替换为 ` change ` 中对应的数字,直到遇到比 ` change ` 中对应数字大的数字,停止替换。
66
+
67
+ 时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 ` num ` 的长度。
68
+
63
69
<!-- tabs:start -->
64
70
65
71
### ** Python3**
69
75
``` python
70
76
class Solution :
71
77
def maximumNumber (self , num : str , change : List[int ]) -> str :
72
- find = False
73
- nums = list (num)
74
- for i, c in enumerate (num):
75
- if int (c) < change[int (c)]:
76
- nums[i] = str (change[int (c)])
77
- find = True
78
- elif find and int (c) == change[int (c)]:
79
- continue
80
- elif find:
78
+ s = list (num)
79
+ for i, c in enumerate (s):
80
+ if change[int (c)] > int (c):
81
+ while i < len (s) and int (s[i]) <= change[int (s[i])]:
82
+ s[i] = str (change[int (s[i])])
83
+ i += 1
81
84
break
82
- return ' ' .join(nums )
85
+ return ' ' .join(s )
83
86
```
84
87
85
88
### ** Java**
@@ -89,21 +92,54 @@ class Solution:
89
92
``` java
90
93
class Solution {
91
94
public String maximumNumber (String num , int [] change ) {
92
- boolean find = false ;
93
- char [] nums = num. toCharArray();
94
- for (int i = 0 ; i < num. length(); ++ i) {
95
- int c = num. charAt(i) - ' 0' ;
96
- if (c < change[c]) {
97
- nums[i] = (char ) (' 0' + change[c]);
98
- find = true ;
99
- } else if (find && c == change[c]) {
100
- continue ;
101
- } else if (find) {
95
+ char [] s = num. toCharArray();
96
+ for (int i = 0 ; i < s. length; ++ i) {
97
+ if (change[s[i] - ' 0' ] > s[i] - ' 0' ) {
98
+ for (; i < s. length && s[i] - ' 0' <= change[s[i] - ' 0' ]; ++ i) {
99
+ s[i] = (char ) (change[s[i] - ' 0' ] + ' 0' );
100
+ }
101
+ break ;
102
+ }
103
+ }
104
+ return String . valueOf(s);
105
+ }
106
+ }
107
+ ```
108
+
109
+ ### ** C++**
110
+
111
+ ``` cpp
112
+ class Solution {
113
+ public:
114
+ string maximumNumber(string num, vector<int >& change) {
115
+ int n = num.size();
116
+ for (int i = 0; i < n; ++i) {
117
+ if (change[ num[ i] - '0'] > num[ i] - '0') {
118
+ for (; i < n && change[ num[ i] - '0'] >= num[ i] - '0'; ++i) {
119
+ num[ i] = change[ num[ i] - '0'] + '0';
120
+ }
102
121
break;
103
122
}
104
123
}
105
- return new String (nums) ;
124
+ return num ;
106
125
}
126
+ };
127
+ ```
128
+
129
+ ### **Go**
130
+
131
+ ```go
132
+ func maximumNumber(num string, change []int) string {
133
+ s := []byte(num)
134
+ for i, c := range num {
135
+ if change[c-'0'] > int(c-'0') {
136
+ for ; i < len(s) && change[s[i]-'0'] >= int(s[i]-'0'); i++ {
137
+ s[i] = byte(change[s[i]-'0']) + '0'
138
+ }
139
+ break
140
+ }
141
+ }
142
+ return string(s)
107
143
}
108
144
```
109
145
0 commit comments