File tree 6 files changed +311
-2
lines changed
solution/1400-1499/1404.Number of Steps to Reduce a Number in Binary Representation to One
6 files changed +311
-2
lines changed Original file line number Diff line number Diff line change @@ -62,22 +62,130 @@ Step 1) 2 是偶数,除 2 得到 1
62
62
63
63
<!-- 这里可写通用的实现逻辑 -->
64
64
65
+ ** 方法一:模拟操作**
66
+
67
+ 模拟操作 1/2,同时用 carry 记录进位。
68
+
65
69
<!-- tabs:start -->
66
70
67
71
### ** Python3**
68
72
69
73
<!-- 这里可写当前语言的特殊实现逻辑 -->
70
74
71
75
``` python
72
-
76
+ class Solution :
77
+ def numSteps (self , s : str ) -> int :
78
+ carry = False
79
+ ans = 0
80
+ for c in s[:0 :- 1 ]:
81
+ if carry:
82
+ if c == ' 0' :
83
+ c = ' 1'
84
+ carry = False
85
+ else :
86
+ c = ' 0'
87
+ if c == ' 1' :
88
+ ans += 1
89
+ carry = True
90
+ ans += 1
91
+ if carry:
92
+ ans += 1
93
+ return ans
73
94
```
74
95
75
96
### ** Java**
76
97
77
98
<!-- 这里可写当前语言的特殊实现逻辑 -->
78
99
79
100
``` java
101
+ class Solution {
102
+ public int numSteps (String s ) {
103
+ boolean carry = false ;
104
+ int ans = 0 ;
105
+ for (int i = s. length() - 1 ; i > 0 ; -- i) {
106
+ char c = s. charAt(i);
107
+ if (carry) {
108
+ if (c == ' 0' ) {
109
+ c = ' 1' ;
110
+ carry = false ;
111
+ } else {
112
+ c = ' 0' ;
113
+ }
114
+ }
115
+ if (c == ' 1' ) {
116
+ ++ ans;
117
+ carry = true ;
118
+ }
119
+ ++ ans;
120
+ }
121
+ if (carry) {
122
+ ++ ans;
123
+ }
124
+ return ans;
125
+ }
126
+ }
127
+ ```
128
+
129
+ ### ** C++**
130
+
131
+ ``` cpp
132
+ class Solution {
133
+ public:
134
+ int numSteps(string s) {
135
+ int ans = 0;
136
+ bool carry = false;
137
+ for (int i = s.size() - 1; i; --i)
138
+ {
139
+ char c = s[ i] ;
140
+ if (carry)
141
+ {
142
+ if (c == '0')
143
+ {
144
+ c = '1';
145
+ carry = false;
146
+ }
147
+ else c = '0';
148
+ }
149
+ if (c == '1')
150
+ {
151
+ ++ans;
152
+ carry = true;
153
+ }
154
+ ++ans;
155
+ }
156
+ if (carry) ++ans;
157
+ return ans;
158
+ }
159
+ };
160
+ ```
80
161
162
+ ### **Go**
163
+
164
+ ```go
165
+ func numSteps(s string) int {
166
+ ans := 0
167
+ carry := false
168
+ for i := len(s) - 1; i > 0; i-- {
169
+ c := s[i]
170
+ if carry {
171
+ if c == '0' {
172
+ c = '1'
173
+ carry = false
174
+ } else {
175
+ c = '0'
176
+ }
177
+ }
178
+ if c == '1' {
179
+ ans++
180
+ carry = true
181
+ }
182
+ ans++
183
+ }
184
+ if carry {
185
+ ans++
186
+ }
187
+ return ans
188
+ }
81
189
```
82
190
83
191
### ** ...**
Original file line number Diff line number Diff line change @@ -64,15 +64,120 @@ Step 1) 2 is even, divide by 2 and obtain 1.
64
64
### ** Python3**
65
65
66
66
``` python
67
-
67
+ class Solution :
68
+ def numSteps (self , s : str ) -> int :
69
+ carry = False
70
+ ans = 0
71
+ for c in s[:0 :- 1 ]:
72
+ if carry:
73
+ if c == ' 0' :
74
+ c = ' 1'
75
+ carry = False
76
+ else :
77
+ c = ' 0'
78
+ if c == ' 1' :
79
+ ans += 1
80
+ carry = True
81
+ ans += 1
82
+ if carry:
83
+ ans += 1
84
+ return ans
68
85
```
69
86
70
87
### ** Java**
71
88
72
89
``` java
90
+ class Solution {
91
+ public int numSteps (String s ) {
92
+ boolean carry = false ;
93
+ int ans = 0 ;
94
+ for (int i = s. length() - 1 ; i > 0 ; -- i) {
95
+ char c = s. charAt(i);
96
+ if (carry) {
97
+ if (c == ' 0' ) {
98
+ c = ' 1' ;
99
+ carry = false ;
100
+ } else {
101
+ c = ' 0' ;
102
+ }
103
+ }
104
+ if (c == ' 1' ) {
105
+ ++ ans;
106
+ carry = true ;
107
+ }
108
+ ++ ans;
109
+ }
110
+ if (carry) {
111
+ ++ ans;
112
+ }
113
+ return ans;
114
+ }
115
+ }
116
+ ```
73
117
118
+ ### ** C++**
119
+
120
+ ``` cpp
121
+ class Solution {
122
+ public:
123
+ int numSteps(string s) {
124
+ int ans = 0;
125
+ bool carry = false;
126
+ for (int i = s.size() - 1; i; --i)
127
+ {
128
+ char c = s[ i] ;
129
+ if (carry)
130
+ {
131
+ if (c == '0')
132
+ {
133
+ c = '1';
134
+ carry = false;
135
+ }
136
+ else c = '0';
137
+ }
138
+ if (c == '1')
139
+ {
140
+ ++ans;
141
+ carry = true;
142
+ }
143
+ ++ans;
144
+ }
145
+ if (carry) ++ans;
146
+ return ans;
147
+ }
148
+ };
74
149
```
75
150
151
+ ### **Go**
152
+
153
+ ```go
154
+ func numSteps(s string) int {
155
+ ans := 0
156
+ carry := false
157
+ for i := len(s) - 1; i > 0; i-- {
158
+ c := s[i]
159
+ if carry {
160
+ if c == '0' {
161
+ c = '1'
162
+ carry = false
163
+ } else {
164
+ c = '0'
165
+ }
166
+ }
167
+ if c == '1' {
168
+ ans++
169
+ carry = true
170
+ }
171
+ ans++
172
+ }
173
+ if carry {
174
+ ans++
175
+ }
176
+ return ans
177
+ }
178
+ ```
179
+
180
+
76
181
### ** ...**
77
182
78
183
```
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ int numSteps (string s) {
4
+ int ans = 0 ;
5
+ bool carry = false ;
6
+ for (int i = s.size () - 1 ; i; --i)
7
+ {
8
+ char c = s[i];
9
+ if (carry)
10
+ {
11
+ if (c == ' 0' )
12
+ {
13
+ c = ' 1' ;
14
+ carry = false ;
15
+ }
16
+ else c = ' 0' ;
17
+ }
18
+ if (c == ' 1' )
19
+ {
20
+ ++ans;
21
+ carry = true ;
22
+ }
23
+ ++ans;
24
+ }
25
+ if (carry) ++ans;
26
+ return ans;
27
+ }
28
+ };
Original file line number Diff line number Diff line change
1
+ func numSteps (s string ) int {
2
+ ans := 0
3
+ carry := false
4
+ for i := len (s ) - 1 ; i > 0 ; i -- {
5
+ c := s [i ]
6
+ if carry {
7
+ if c == '0' {
8
+ c = '1'
9
+ carry = false
10
+ } else {
11
+ c = '0'
12
+ }
13
+ }
14
+ if c == '1' {
15
+ ans ++
16
+ carry = true
17
+ }
18
+ ans ++
19
+ }
20
+ if carry {
21
+ ans ++
22
+ }
23
+ return ans
24
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int numSteps (String s ) {
3
+ boolean carry = false ;
4
+ int ans = 0 ;
5
+ for (int i = s .length () - 1 ; i > 0 ; --i ) {
6
+ char c = s .charAt (i );
7
+ if (carry ) {
8
+ if (c == '0' ) {
9
+ c = '1' ;
10
+ carry = false ;
11
+ } else {
12
+ c = '0' ;
13
+ }
14
+ }
15
+ if (c == '1' ) {
16
+ ++ans ;
17
+ carry = true ;
18
+ }
19
+ ++ans ;
20
+ }
21
+ if (carry ) {
22
+ ++ans ;
23
+ }
24
+ return ans ;
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def numSteps (self , s : str ) -> int :
3
+ carry = False
4
+ ans = 0
5
+ for c in s [:0 :- 1 ]:
6
+ if carry :
7
+ if c == '0' :
8
+ c = '1'
9
+ carry = False
10
+ else :
11
+ c = '0'
12
+ if c == '1' :
13
+ ans += 1
14
+ carry = True
15
+ ans += 1
16
+ if carry :
17
+ ans += 1
18
+ return ans
You can’t perform that action at this time.
0 commit comments