目录
开启2020年学习新征程,力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。
第1题:两数之和
试题要求如下:
回答(C语言):
-
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
-
int* res = (
int *)
malloc(
sizeof(
int) *
2);
-
-
for(
int i =
0; i < numsSize
-1; i++) {
-
for(
int j = i +
1; j < numsSize; j++) {
-
if(nums[i] + nums [j] == target) {
-
res[
0] = i;
-
res[
1] = j;
-
*returnSize =
2;
-
return res;
-
}
-
}
-
}
-
-
*returnSize =
0;
-
return res;
-
}
第2题:整数反转
试题要求如下:
回答(C语言):
-
int reverse(int x){
-
long num =
0;
-
while (x !=
0) {
-
num = num *
10 + x %
10;
-
x = x /
10;
-
}
-
return (num>
2147483647 || num<
-2147483648) ?
0 : num;
-
}
第3题:判断回字文
试题要求如下:
回答(C语言):
-
bool isPalindrome(int x){
-
int num1=
0;
-
long num2=
0;
-
-
num1=x;
-
-
while(num1>
0){
-
num2=num2*
10+num1%
10;
-
num1/=
10;
-
}
-
-
if(num2==x)
-
return
1;
-
else
-
return
0;
-
}
第4题:罗马数字转整数
试题要求如下:
回答(C语言):
-
int charToInt(char c)
-
{
-
char strArray[
7] = {
'I',
'V',
'X',
'L',
'C',
'D',
'M'};
-
int intArray[
7] = {
1,
5,
10,
50,
100,
500,
1000};
-
-
for(
int i =
0; i <
7; i++)
-
{
-
if(strArray[i] == c)
-
{
-
return intArray[i];
-
}
-
}
-
return
0;
-
}
-
-
int romanToInt(char * s)
-
{
-
int len =
strlen(s);
-
int v =
0;
-
int c,n;
-
-
for(
int i =
0; i < len -
1 ; i++)
-
{
-
c = charToInt(s[i]);
-
n = charToInt(s[i +
1]);
-
v = (c < n) ? v - c : v + c;
-
}
-
v += charToInt(s[len -
1]);
-
return v;
-
}
第5题:最长公共前缀
试题要求如下:
回答(C语言):
-
char * longestCommonPrefix(char ** strs, int strsSize)
-
{
-
if(strsSize==
0)
-
return
"";
-
if(strsSize==
1)
-
return strs[
0];
-
int i=
0,j=
0;
-
while(
1)
-
{
-
if(strs[i][j]==
'\0')
-
break;
-
-
if(strs[i][j]==strs[++i][j]) {
-
if(i==strsSize
-1)
-
{
-
j++;
-
i=
0;
-
}
-
}
-
else
-
break;
-
}
-
-
char* res=(
char*)
malloc(j+
1);
-
res=
memset(res,
0,j+
1);
-
res=
strncpy(res,strs[
0],j);
-
return res;
-
}
第6题:判断字符串有效括号
试题要求如下:
回答(C语言):
-
bool isValid(char * s){
-
int top =
0;
-
char *
stack = (
char*)
malloc(
strlen(s));
-
-
if (s==
NULL ||
strlen(s)<=
0)
return
true;
-
-
for (
int i =
0; i<
strlen(s); i++){
-
if(s[i]==
'(' || s[i]==
'{' || s[i]==
'['){
-
stack[top++] = s[i];
-
}
else{
-
if(--top <
0)
return
false;
-
if(s[i]==
')' &&
stack[top] !=
'(')
return
false;
-
if(s[i]==
'}' &&
stack[top] !=
'{')
return
false;
-
if(s[i]==
']' &&
stack[top] !=
'[')
return
false;
-
}
-
}
-
-
if (top >
0)
return
false;
-
return
true;
-
}
第7题:将两个有序链表合并
试题要求如下:
回答(C语言):
-
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
-
if(l1==
NULL)
-
return l2;
-
if(l2==
NULL)
-
return l1;
-
if(l1->val < l2->val){
-
l1->next = mergeTwoLists(l1->next,l2);
-
return l1;
-
}
else{
-
l2->next = mergeTwoLists(l1,l2->next);
-
return l2;
-
}
-
}
第8题:删除重复元素
试题要求如下:
回答(C语言):
-
int removeDuplicates(int* nums, int numsSize){
-
int j=
0;
-
-
if(nums==
NULL || numsSize<=
0)
-
return
0;
-
-
for(
int i=
0;i<numsSize
-1;i++){
-
if(nums[i]!=nums[i+
1])
-
{
-
nums[j++]=nums[i];
-
}
-
}
-
-
nums[j]=nums[numsSize
-1];
-
-
return j+
1;
-
}
第9题:移除元素
试题要求如下:
回答(C语言):
-
int removeElement(int* nums, int numsSize, int val){
-
int cou=
0;
-
-
if(nums==
NULL || numsSize<=
0)
-
return
0;
-
-
for(
int i=
0;i<numsSize;){
-
if(nums[i]==val){
-
cou++;
-
-
if(i==numsSize-cou)
-
break;
-
-
for(
int j=i,k=i+
1;j<numsSize-cou;j++,k++)
-
nums[j]=nums[k];
-
}
-
else
-
{
-
i++;
-
}
-
}
-
-
return numsSize-cou;
-
}
第10题:实现 strStr() 函数
试题要求如下:
回答(C语言):
-
int strStr(char * haystack, char * needle){
-
int i=
0,j=
0,k=
0;
-
-
while(haystack[i]&&needle[j])
-
{
-
if(haystack[i]==needle[j])
-
{
-
i++;
-
j++;
-
}
-
else
-
{
-
k++;
-
i=k;
-
j=
0;
-
}
-
}
-
-
if(needle[j]==
'\0')
-
return k;
-
return
-1;
-
}
转载:https://blog.csdn.net/m0_38106923/article/details/104101573
查看评论