• 【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;
      }
      
  • 相关阅读:
    win10 ,本地连接无法识别网络 ,无线正常,
    vba 声音
    win10 优化
    比较火和常用的命令
    手机电脑平板 查图纸、查点位图、查通病、自学维修知识等通通都有的工具
    e4a mysql
    e4a 对话框的 多选单选颜色日期时间
    e4s 文本操作 数组操作
    e4a sqlite案例
    e4a-窗口切换
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/11489581.html
Copyright © 2020-2023  润新知