mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 11:34:46 +08:00
Merge remote-tracking branch 'origin/remote' into remote
This commit is contained in:
@ -263,6 +263,63 @@ var subsets = function(nums) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
C:
|
||||||
|
```c
|
||||||
|
int* path;
|
||||||
|
int pathTop;
|
||||||
|
int** ans;
|
||||||
|
int ansTop;
|
||||||
|
//记录二维数组中每个一维数组的长度
|
||||||
|
int* length;
|
||||||
|
//将当前path数组复制到ans中
|
||||||
|
void copy() {
|
||||||
|
int* tempPath = (int*)malloc(sizeof(int) * pathTop);
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < pathTop; i++) {
|
||||||
|
tempPath[i] = path[i];
|
||||||
|
}
|
||||||
|
ans = (int**)realloc(ans, sizeof(int*) * (ansTop+1));
|
||||||
|
length[ansTop] = pathTop;
|
||||||
|
ans[ansTop++] = tempPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
void backTracking(int* nums, int numsSize, int startIndex) {
|
||||||
|
//收集子集,要放在终止添加的上面,否则会漏掉自己
|
||||||
|
copy();
|
||||||
|
//若startIndex大于数组大小,返回
|
||||||
|
if(startIndex >= numsSize) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int j;
|
||||||
|
for(j = startIndex; j < numsSize; j++) {
|
||||||
|
//将当前下标数字放入path中
|
||||||
|
path[pathTop++] = nums[j];
|
||||||
|
backTracking(nums, numsSize, j+1);
|
||||||
|
//回溯
|
||||||
|
pathTop--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int** subsets(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
|
||||||
|
//初始化辅助变量
|
||||||
|
path = (int*)malloc(sizeof(int) * numsSize);
|
||||||
|
ans = (int**)malloc(0);
|
||||||
|
length = (int*)malloc(sizeof(int) * 1500);
|
||||||
|
ansTop = pathTop = 0;
|
||||||
|
//进入回溯
|
||||||
|
backTracking(nums, numsSize, 0);
|
||||||
|
//设置二维数组中元素个数
|
||||||
|
*returnSize = ansTop;
|
||||||
|
//设置二维数组中每个一维数组的长度
|
||||||
|
*returnColumnSizes = (int*)malloc(sizeof(int) * ansTop);
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < ansTop; i++) {
|
||||||
|
(*returnColumnSizes)[i] = length[i];
|
||||||
|
}
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
|
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
|
||||||
|
@ -476,6 +476,82 @@ func isNormalIp(s string,startIndex,end int)bool{
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
C:
|
||||||
|
```c
|
||||||
|
//记录结果
|
||||||
|
char** result;
|
||||||
|
int resultTop;
|
||||||
|
//记录应该加入'.'的位置
|
||||||
|
int segments[3];
|
||||||
|
int isValid(char* s, int start, int end) {
|
||||||
|
if(start > end)
|
||||||
|
return 0;
|
||||||
|
if (s[start] == '0' && start != end) { // 0开头的数字不合法
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int num = 0;
|
||||||
|
for (int i = start; i <= end; i++) {
|
||||||
|
if (s[i] > '9' || s[i] < '0') { // 遇到非数字字符不合法
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
num = num * 10 + (s[i] - '0');
|
||||||
|
if (num > 255) { // 如果大于255了不合法
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//startIndex为起始搜索位置,pointNum为'.'对象
|
||||||
|
void backTracking(char* s, int startIndex, int pointNum) {
|
||||||
|
//若'.'数量为3,分隔结束
|
||||||
|
if(pointNum == 3) {
|
||||||
|
//若最后一段字符串符合要求,将当前的字符串放入result种
|
||||||
|
if(isValid(s, startIndex, strlen(s) - 1)) {
|
||||||
|
char* tempString = (char*)malloc(sizeof(char) * strlen(s) + 4);
|
||||||
|
int j;
|
||||||
|
//记录添加字符时tempString的下标
|
||||||
|
int count = 0;
|
||||||
|
//记录添加字符时'.'的使用数量
|
||||||
|
int count1 = 0;
|
||||||
|
for(j = 0; j < strlen(s); j++) {
|
||||||
|
tempString[count++] = s[j];
|
||||||
|
//若'.'的使用数量小于3且当前下标等于'.'下标,添加'.'到数组
|
||||||
|
if(count1 < 3 && j == segments[count1]) {
|
||||||
|
tempString[count++] = '.';
|
||||||
|
count1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tempString[count] = 0;
|
||||||
|
//扩容result数组
|
||||||
|
result = (char**)realloc(result, sizeof(char*) * (resultTop + 1));
|
||||||
|
result[resultTop++] = tempString;
|
||||||
|
}
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for(i = startIndex; i < strlen(s); i++) {
|
||||||
|
if(isValid(s, startIndex, i)) {
|
||||||
|
//记录应该添加'.'的位置
|
||||||
|
segments[pointNum] = i;
|
||||||
|
backTracking(s, i + 1, pointNum + 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char ** restoreIpAddresses(char * s, int* returnSize){
|
||||||
|
result = (char**)malloc(0);
|
||||||
|
resultTop = 0;
|
||||||
|
backTracking(s, 0, 0);
|
||||||
|
*returnSize = resultTop;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
|
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
|
||||||
|
@ -217,6 +217,29 @@ var findContentChildren = function(g, s) {
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
C:
|
||||||
|
```c
|
||||||
|
int cmp(int* a, int* b) {
|
||||||
|
return *a - *b;
|
||||||
|
}
|
||||||
|
|
||||||
|
int findContentChildren(int* g, int gSize, int* s, int sSize){
|
||||||
|
if(sSize == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
//将两个数组排序为升序
|
||||||
|
qsort(g, gSize, sizeof(int), cmp);
|
||||||
|
qsort(s, sSize, sizeof(int), cmp);
|
||||||
|
|
||||||
|
int numFedChildren = 0;
|
||||||
|
int i = 0;
|
||||||
|
for(i = 0; i < sSize; ++i) {
|
||||||
|
if(numFedChildren < gSize && g[numFedChildren] <= s[i])
|
||||||
|
numFedChildren++;
|
||||||
|
}
|
||||||
|
return numFedChildren;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
|
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
|
||||||
|
Reference in New Issue
Block a user