mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 04:54:51 +08:00
Add C version for Leetcode202 passed Leetcode submission
This commit is contained in:
@ -315,5 +315,75 @@ class Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
C:
|
||||||
|
```C
|
||||||
|
typedef struct HashNodeTag {
|
||||||
|
int key; /* num */
|
||||||
|
struct HashNodeTag *next;
|
||||||
|
}HashNode;
|
||||||
|
|
||||||
|
/* Calcualte the hash key */
|
||||||
|
static inline int hash(int key, int size) {
|
||||||
|
int index = key % size;
|
||||||
|
return (index > 0) ? (index) : (-index);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate the sum of the squares of its digits*/
|
||||||
|
static inline int calcSquareSum(int num) {
|
||||||
|
unsigned int sum = 0;
|
||||||
|
while(num > 0) {
|
||||||
|
sum += (num % 10) * (num % 10);
|
||||||
|
num = num/10;
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define HASH_TABLE_SIZE (32)
|
||||||
|
|
||||||
|
bool isHappy(int n){
|
||||||
|
int sum = n;
|
||||||
|
int index = 0;
|
||||||
|
bool bHappy = false;
|
||||||
|
bool bExit = false;
|
||||||
|
/* allocate the memory for hash table with chaining method*/
|
||||||
|
HashNode ** hashTable = (HashNode **)calloc(HASH_TABLE_SIZE, sizeof(HashNode));
|
||||||
|
|
||||||
|
while(bExit == false) {
|
||||||
|
/* check if n has been calculated */
|
||||||
|
index = hash(n, HASH_TABLE_SIZE);
|
||||||
|
|
||||||
|
HashNode ** p = hashTable + index;
|
||||||
|
|
||||||
|
while((*p) && (bExit == false)) {
|
||||||
|
/* Check if this num was calculated, if yes, this will be endless loop */
|
||||||
|
if((*p)->key == n) {
|
||||||
|
bHappy = false;
|
||||||
|
bExit = true;
|
||||||
|
}
|
||||||
|
/* move to next node of the same index */
|
||||||
|
p = &((*p)->next);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* put n intot hash table */
|
||||||
|
HashNode * newNode = (HashNode *)malloc(sizeof(HashNode));
|
||||||
|
newNode->key = n;
|
||||||
|
newNode->next = NULL;
|
||||||
|
|
||||||
|
*p = newNode;
|
||||||
|
|
||||||
|
sum = calcSquareSum(n);
|
||||||
|
if(sum == 1) {
|
||||||
|
bHappy = true;
|
||||||
|
bExit = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
n = sum;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return bHappy;
|
||||||
|
}
|
||||||
|
```
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
Reference in New Issue
Block a user