当前位置:
首页 >
行业知识 >
【LeetCode】替换空格&&消失的数字&&分割链表&&除自身以外数组的乘积
行业知识
【LeetCode】替换空格&&消失的数字&&分割链表&&除自身以外数组的乘积
2026-11-09 16:02:52
来源:互联网转载
�� 作者:@阿亮joy.
专栏:《阿亮爱刷题》
座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根
目录
- 替换空格
- 消失的数字
- 思路一
- 思路二
- 分隔链表
- 除自身以外数组的乘积
- 总结
替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
- 0 int len = strlen(s); int spaceCount = 0;//统计空格的个数 int i = 0; for(i = 0; i next = cur; smallTail = cur; } else { bigTail->next = cur; bigTail = cur; } cur = cur->next; } bigTail->next = NULL; smallTail->next = bigHead->next; struct ListNode* ret = smallHead->next; free(smallHead); free(bigHead); return ret;}
除自身以外数组的乘积
给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据保证数组 nums 之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请不要使用除法,且在 O(n) 时间复杂度内完成此题。
示例 1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例 2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]
思路:定义left和right,利用一次for循环进行乘积,将每个位置左边的数据和右边的数据乘积计算出来放到返回数组中,循环结束后将结果返回。
int* productExceptSelf(int* nums, int numsSize, int* returnSize){ int* result=(int*)malloc(sizeof(int)*numsSize); int left=1,right=1;//left:从左边累乘,right:从右边累乘 for(int i=0;i result[i]=1; } for(int i=0;i result[i] *= left;//乘以其左边的乘积 left *= nums[i];//左边的数的乘积 result[numsSize-1-i] *= right;//乘以其左边的乘积 right *= nums[numsSize-1-i];//右边的数的乘积 } *returnSize=numsSize; return result;}
- 0 int len = strlen(s); int spaceCount = 0;//统计空格的个数 int i = 0; for(i = 0; i next = cur; smallTail = cur; } else { bigTail->next = cur; bigTail = cur; } cur = cur->next; } bigTail->next = NULL; smallTail->next = bigHead->next; struct ListNode* ret = smallHead->next; free(smallHead); free(bigHead); return ret;}