Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7f799b8

Browse files
raof01azl397985856
authored andcommitted
1 parent 4414c1b commit 7f799b8

File tree

3 files changed

+102
-1
lines changed

3 files changed

+102
-1
lines changed
17 KB
Loading[フレーム]

‎problems/191.number-of-1-bits.md‎

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ In Java, the compiler represents the signed integers using 2's complement notati
5252

5353
## 代码
5454

55+
语言支持:JS, C++
56+
57+
JavaScript Code:
58+
5559
```js
5660
/*
5761
* @lc app=leetcode id=191 lang=javascript
@@ -132,4 +136,49 @@ var hammingWeight = function(n) {
132136
return count;
133137
};
134138

135-
```
139+
```
140+
C++ code:
141+
```c++
142+
class Solution {
143+
public:
144+
int hammingWeight(uint32_t v) {
145+
auto count = 0;
146+
while (v != 0) {
147+
v &= (v - 1);
148+
++count;
149+
}
150+
return count;
151+
}
152+
};
153+
```
154+
155+
## 扩展
156+
可以使用位操作来达到目的。例如8位的整数21:
157+
158+
![number-of-1-bits](../assets/problems/191.number-of-1-bits.png)
159+
160+
C++ Code:
161+
```c++
162+
const uint32_t ODD_BIT_MASK = 0xAAAAAAAA;
163+
const uint32_t EVEN_BIT_MASK = 0x55555555;
164+
const uint32_t ODD_2BIT_MASK = 0xCCCCCCCC;
165+
const uint32_t EVEN_2BIT_MASK = 0x33333333;
166+
const uint32_t ODD_4BIT_MASK = 0xF0F0F0F0;
167+
const uint32_t EVEN_4BIT_MASK = 0x0F0F0F0F;
168+
const uint32_t ODD_8BIT_MASK = 0xFF00FF00;
169+
const uint32_t EVEN_8BIT_MASK = 0x00FF00FF;
170+
const uint32_t ODD_16BIT_MASK = 0xFFFF0000;
171+
const uint32_t EVEN_16BIT_MASK = 0x0000FFFF;
172+
173+
class Solution {
174+
public:
175+
176+
int hammingWeight(uint32_t v) {
177+
v = (v & EVEN_BIT_MASK) + ((v & ODD_BIT_MASK) >> 1);
178+
v = (v & EVEN_2BIT_MASK) + ((v & ODD_2BIT_MASK) >> 2);
179+
v = (v & EVEN_4BIT_MASK) + ((v & ODD_4BIT_MASK) >> 4);
180+
v = (v & EVEN_8BIT_MASK) + ((v & ODD_8BIT_MASK) >> 8);
181+
return (v & EVEN_16BIT_MASK) + ((v & ODD_16BIT_MASK) >> 16);
182+
}
183+
};
184+
```

‎problems/92.reverse-linked-list-ii.md‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ Output: 1->4->3->2->5->NULL
4949

5050
## 代码
5151

52+
语言支持:JS, C++
53+
54+
JavaScript Code:
55+
5256
```js
5357
/*
5458
* @lc app=leetcode id=92 lang=javascript
@@ -142,3 +146,51 @@ var reverseBetween = function(head, m, n) {
142146
};
143147

144148
```
149+
C++ Code:
150+
```c++
151+
/**
152+
* Definition for singly-linked list.
153+
* struct ListNode {
154+
* int val;
155+
* ListNode *next;
156+
* ListNode(int x) : val(x), next(NULL) {}
157+
* };
158+
*/
159+
class Solution {
160+
public:
161+
ListNode* reverseBetween(ListNode* head, int s, int e) {
162+
if (s == e) return head;
163+
ListNode* prev = nullptr;
164+
auto cur = head;
165+
for (int i = 1; i < s; ++i) {
166+
prev = cur;
167+
cur = cur->next;
168+
}
169+
// 此时各指针指向:
170+
// x -> x -> x -> x -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> x -> x -> x ->
171+
// ^head ^prev ^cur
172+
ListNode* p = nullptr;
173+
auto c = cur;
174+
auto tail = c;
175+
ListNode* n = nullptr;
176+
for (int i = s; i <= e; ++i) {
177+
n = c->next;
178+
c->next = p;
179+
p = c;
180+
c = n;
181+
}
182+
// 此时各指针指向:
183+
// x -> x -> x -> x 8 -> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 x -> x -> x ->
184+
// ^head ^prev ^p ^cur ^c
185+
// ^tail
186+
if (prev != nullptr) { // 若指向前一个节点的指针不为空,则说明s在链表中间(不是头节点)
187+
prev->next = p;
188+
cur->next = c;
189+
return head;
190+
} else {
191+
if (tail != nullptr) tail->next = c;
192+
return p;
193+
}
194+
}
195+
};
196+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /