@@ -71,9 +71,9 @@ nums 的数字和是 1 + 2 + 3 + 4 = 10 。
71
71
72
72
### 方法一:模拟
73
73
74
- 我们遍历数组 $nums$,计算元素和 $a$ 与数字和 $b $,最后返回 $|a - b |$ 即可。
74
+ 我们遍历数组 $\textit{ nums} $,计算元素和 $x$ 和数字和 $y $,最后返回 $|x - y |$ 即可。由于 $x$ 一定大于等于 $y$,所以我们也可以直接返回 $x - y$ 。
75
75
76
- 时间复杂度 $O(n)$,其中 $n$ 为数组 $ nums$ 的长度 。空间复杂度 $O(1)$。
76
+ 时间复杂度 $O(n \times \log _ {10} M )$,其中 $n$ 和 $M$ 分别是数组 $\textit{ nums}$ 的长度和数组中元素的最大值 。空间复杂度 $O(1)$。
77
77
78
78
<!-- tabs:start -->
79
79
@@ -82,27 +82,28 @@ nums 的数字和是 1 + 2 + 3 + 4 = 10 。
82
82
``` python
83
83
class Solution :
84
84
def differenceOfSum (self , nums : List[int ]) -> int :
85
- a, b = sum (nums), 0
86
- for x in nums:
87
- while x:
88
- b += x % 10
89
- x //= 10
90
- return abs (a - b)
85
+ x = y = 0
86
+ for v in nums:
87
+ x += v
88
+ while v:
89
+ y += v % 10
90
+ v //= 10
91
+ return x - y
91
92
```
92
93
93
94
#### Java
94
95
95
96
``` java
96
97
class Solution {
97
98
public int differenceOfSum (int [] nums ) {
98
- int a = 0 , b = 0 ;
99
- for (int x : nums) {
100
- a += x ;
101
- for (; x > 0 ; x /= 10 ) {
102
- b += x % 10 ;
99
+ int x = 0 , y = 0 ;
100
+ for (int v : nums) {
101
+ x += v ;
102
+ for (; v > 0 ; v /= 10 ) {
103
+ y += v % 10 ;
103
104
}
104
105
}
105
- return Math . abs(a - b) ;
106
+ return x - y ;
106
107
}
107
108
}
108
109
```
@@ -113,14 +114,14 @@ class Solution {
113
114
class Solution {
114
115
public:
115
116
int differenceOfSum(vector<int >& nums) {
116
- int a = 0, b = 0;
117
- for (int x : nums) {
118
- a += x ;
119
- for (; x; x /= 10) {
120
- b += x % 10;
117
+ int x = 0, y = 0;
118
+ for (int v : nums) {
119
+ x += v ;
120
+ for (; v; v /= 10) {
121
+ y += v % 10;
121
122
}
122
123
}
123
- return abs(a - b) ;
124
+ return x - y ;
124
125
}
125
126
};
126
127
```
@@ -129,36 +130,29 @@ public:
129
130
130
131
```go
131
132
func differenceOfSum(nums []int) int {
132
- a, b := 0, 0
133
- for _, x := range nums {
134
- a += x
135
- for ; x > 0; x /= 10 {
136
- b += x % 10
133
+ var x, y int
134
+ for _, v := range nums {
135
+ x += v
136
+ for ; v > 0; v /= 10 {
137
+ y += v % 10
137
138
}
138
139
}
139
- return abs(a - b)
140
- }
141
-
142
- func abs(x int) int {
143
- if x < 0 {
144
- return -x
145
- }
146
- return x
140
+ return x - y
147
141
}
148
142
```
149
143
150
144
#### TypeScript
151
145
152
146
``` ts
153
147
function differenceOfSum(nums : number []): number {
154
- return nums . reduce (( r , v ) => {
155
- r += v ;
156
- while ( v !== 0 ) {
157
- r -= v % 10 ;
158
- v = Math . floor ( v / 10 ) ;
148
+ let [x, y] = [ 0 , 0 ];
149
+ for ( let v of nums ) {
150
+ x += v ;
151
+ for (; v ; v = Math . floor ( v / 10 )) {
152
+ y += v % 10 ;
159
153
}
160
- return r ;
161
- }, 0 ) ;
154
+ }
155
+ return x - y ;
162
156
}
163
157
```
164
158
@@ -167,16 +161,19 @@ function differenceOfSum(nums: number[]): number {
167
161
``` rust
168
162
impl Solution {
169
163
pub fn difference_of_sum (nums : Vec <i32 >) -> i32 {
170
- let mut ans = 0 ;
171
- for & num in nums . iter () {
172
- let mut num = num ;
173
- ans += num ;
174
- while num != 0 {
175
- ans -= num % 10 ;
164
+ let mut x = 0 ;
165
+ let mut y = 0 ;
166
+
167
+ for & v in & nums {
168
+ x += v ;
169
+ let mut num = v ;
170
+ while num > 0 {
171
+ y += num % 10 ;
176
172
num /= 10 ;
177
173
}
178
174
}
179
- ans
175
+
176
+ x - y
180
177
}
181
178
}
182
179
```
@@ -185,45 +182,16 @@ impl Solution {
185
182
186
183
``` c
187
184
int differenceOfSum (int* nums, int numsSize) {
188
- int ans = 0;
185
+ int x = 0, y = 0;
189
186
for (int i = 0; i < numsSize; i++) {
190
- ans += nums[ i] ;
191
- while (nums[ i] ) {
192
- ans -= nums[ i] % 10;
193
- nums[ i] /= 10;
187
+ int v = nums[ i] ;
188
+ x += v;
189
+ while (v > 0) {
190
+ y += v % 10;
191
+ v /= 10;
194
192
}
195
193
}
196
- return ans;
197
- }
198
- ```
199
-
200
- <!-- tabs:end -->
201
-
202
- <!-- solution:end -->
203
-
204
- <!-- solution:start -->
205
-
206
- ### 方法二
207
-
208
- <!-- tabs:start -->
209
-
210
- #### Rust
211
-
212
- ```rust
213
- impl Solution {
214
- pub fn difference_of_sum(nums: Vec<i32>) -> i32 {
215
- let a: i32 = nums.iter().sum();
216
- let b: i32 = nums
217
- .iter()
218
- .map(|&n| {
219
- n.to_string()
220
- .chars()
221
- .map(|c| c.to_digit(10).unwrap() as i32)
222
- .sum::<i32>()
223
- })
224
- .sum();
225
- (a - b).abs()
226
- }
194
+ return x - y;
227
195
}
228
196
```
229
197
0 commit comments