Stay button (LeetCode) brush questions, simple questions (the first phase)

Opened in 2020 a new learning journey, stay button (LeetCode) regularly brush title, each lasting 10 questions, heavy traffic comrades can look at ideas I share, is not the most efficient solution, but only to enhance each other.

Problem 1: sum of two numbers, the following:

Answer (C language):

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;
}

 Problem 2: integer reverse, the following:

 Answer (C language):

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;
}

Problem 3: Analyzing back word text, the following:

Answer (C language): 

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;
}

Question 4: Roman numerals to integer, the following: 

 Answer (C language): 

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;
}

 Question 5: longest common prefix, requirements are as follows: 

 Answer (C language): 

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;
}

  Problem 6: Analyzing valid string brackets, the following: 

  Answer (C language): 

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;
}

  Question 7: merge the two ordered list, requirements are as follows: 

Answer (C language): 

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;
    }
}

Question 8: merge the two ordered list, requirements are as follows: 

Answer (C language): 

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;
}

Question 9: remove elements, requirements are as follows: 

 Answer (C language): 

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;
}

 Item 10: Implementing  strstr ()  function , the following: 

  Answer (C language): 

int strStr(char * haystack, char * needle){
    int i=0,j=0,k=0;

    if(strlen(needle)<=0)
        return 0;
        
    while(haystack[i]&&needle[j])
    {
        if(haystack[i]==needle[j])
        {
            i++;
            j++;
            continue;
        }
        else
        {
            k++;
            i=k;
            j=0;
        }
    }
    if(needle[j]=='\0')
        return k;
    return -1;
}

 

Published 143 original articles · won praise 7890 · Views 680,000 +

Guess you like

Origin blog.csdn.net/m0_38106923/article/details/104101573