【436】Solution for LeetCode Problems

Coding everyday. ^_^

1. Two Sum

  • 重点知识:指针可以存储数值,通过 malloc 新建数组
  • int* returnSize:Size of the return array. Store the value in a pointer, say 2.
    *returnSize = 2
  • My solution:
  • /**
     * Note: The returned array must be malloced, assume caller calls free().
     */
    int* twoSum(int* nums, int numsSize, int target, int* returnSize){
        *returnSize = 2;
        int* returnArray = malloc(sizeof(int)*(*returnSize));
        for (int i = 0; i < numsSize-1; i++) {
            for (int j = i+1; j < numsSize; j++) {
                if (nums[i] + nums[j] == target) {
                    returnArray[0] = i;
                    returnArray[1] = j;
                    return returnArray;
                }
            }
        }
        returnArray[0] = -1;
        returnArray[1] = -1;
        return returnArray;
    }
    

2. Add Two Numbers

  • 重点知识:不能通过数字来计算,考虑进位,考虑链表遍历和插入节点,通过 malloc 新建节点
  • Don't use integer to calculate in this problem since the numbers are very long.
  • Need to consider carry bit.
  • This linked list's head is the first node.
  • My solution:
  • /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    
    
    struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
        struct ListNode* p1;
        struct ListNode* p2;
        struct ListNode* l3 = NULL;
        struct ListNode* p3 = NULL;
        p1 = l1;
        p2 = l2;
        
        int carry_bit = 0;
        while (p1 != NULL || p2 != NULL || carry_bit == 1) {
            int num1;
            int num2;
            int num3;
            if (p1 == NULL && p2 == NULL && carry_bit == 1) {
                num3 = 1;
                carry_bit = 0;
            }
            else {
                if (p1 == NULL) {
                    num1 = 0;
                }
                else {
                    num1 = p1->val;
                    p1 = p1->next;
                }
                if (p2 == NULL) {
                    num2 = 0;
                }
                else {
                    num2 = p2->val;
                    p2 = p2->next;
                }
                
                num3 = num1 + num2 + carry_bit;
                if (num3 >= 10) {
                    carry_bit = 1;
                    num3 = num3 - 10;
                }
                else {
                    carry_bit = 0;
                }
            }
    
            struct ListNode* tmp;
            tmp = malloc(sizeof(struct ListNode));
            if (tmp == NULL) {
                fprintf(stderr, "Out of memory.
    ");
                exit(1);
            }
            tmp->val = num3;
            tmp->next = NULL;
            
            if (p3 == NULL) {
                p3 = tmp;
                l3 = p3;
            }
            else {
                p3->next = tmp;
                p3 = p3->next;
            }
        }
        
        return l3;
    }
    

3. Longest Substring Without Repeating Characters

  • 重点知识:多层遍历,时间复杂度过高
  • My solution:
  • int lengthOfLongestSubstring(char * s){
        int length = strlen(s);
        if (length == 1){
            return 1;
        }
        int max = 0;
        for (int i = 0; i < length; i++) {
            int flag = 1;
            for (int j = i + 1; j < length & flag; j++) {
                for (int k = j - 1; k >= i; k--) {
                    if (s[j] == s[k]) {
                        int tmp = j - i;
                        if (max < tmp) {
                            max = tmp;
                        }
                        i = k;
                        flag = 0;
                        break;
                    }
                    if (k == i) {
                        int tmp = j - i + 1;
                        if (max < tmp) {
                            max = tmp;
                        }
                    }
                }
            }
        }
        return max;
    }
    
原文地址:https://www.cnblogs.com/alex-bn-lee/p/11489581.html