zoukankan      html  css  js  c++  java
  • leetcode problem sum

    2. Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
            int sum = 0;
            ListNode a(0);
            ListNode* NODE = &a;
            while(l1 || l2 || sum){
                if(l1){
                    sum += l1->val;
                    l1 = l1->next;
                }
                if(l2){
                    sum += l2->val;
                    l2 = l2->next;
                }
                NODE->next = new ListNode(sum % 10);
                NODE = NODE->next;
                sum /= 10;
            }
            return a.next;
        }
    };
    View Code

     3. Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters.

    Examples:

    Given "abcabcbb", the answer is "abc", which the length is 3.

    Given "bbbbb", the answer is "b", with the length of 1.

    Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

    c++:

    暴力O(N2):Your runtime beats 24.22% of cpp submissions.

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
        int repeat[300], max = -1, temp = 0;
        int len = s.size();
        if(len == 0) return 0;
            for(int i = 0; i < len; i++){
                temp = 0;
                for(int j = 0; j < 200; j++) repeat[j] = 0;
                for(int k = i; k < len; k++){
                    int l = s[k] - ' ';
                    //cout<< " l " << l << endl;
                    if(repeat[l] >= 1) break;
                    if(repeat[l] == 0) {temp++;repeat[l]++;}
                }
                //cout<< temp <<endl;
                if(temp >= max) max = temp;
            }
            return max;
        }
    };
    View Code

    O(n):Your runtime beats 87.46% of cpp submissions.

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            int nmap[128];
            memset(nmap, -1, sizeof(nmap));
            int maxLength = 0, lastRepeatPosition = -1, len = s.size();
            for (int curPosition = 0; curPosition != len; curPosition++) {
                int position = nmap[s[curPosition]];
                if (position > lastRepeatPosition)
                    lastRepeatPosition = position;
                    nmap[s[curPosition]] = curPosition;
                    maxLength = max(maxLength, curPosition - lastRepeatPosition);
            }
            return maxLength;
        }
    };
    View Code

    129. Sum Root to Leaf Numbers

     
    • Total Accepted: 93320
    • Total Submissions: 269426
    • Difficulty: Medium
    • Contributors: Admin

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.

    An example is the root-to-leaf path 1->2->3 which represents the number 123.

    Find the total sum of all root-to-leaf numbers.

    For example,

        1
       / 
      2   3
    

    The root-to-leaf path 1->2 represents the number 12.
    The root-to-leaf path 1->3 represents the number 13.

    Return the sum = 12 + 13 = 25.

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int sumNumbers(TreeNode* root) {
            int sum_current = 0, total = 0;
            if(!root) return 0;
            return DFS(root, sum_current, total);
        }
        
        int DFS(TreeNode* current, int sum, int total){
            if(current == nullptr)
                return 0;
            if(current != nullptr)
                sum = sum * 10 + current->val;
            if(current->left == nullptr && current->right == nullptr){
                total += sum;
                return total;
            }
            return DFS(current->left, sum, total) + DFS(current->right, sum, total);
        }
    };
    View Code
  • 相关阅读:
    render 动态增减表单项校验 小结
    面试题总结2
    禁止蒙层底部页面跟随滚动
    前端面试题总结1
    ||与??的区别,??非空运算符,??=非空赋值运算符 ??.链判断运算符 Object.defineProperty 与Proxy的区别
    chrome 代码调试实用小技巧
    Ubuntu安装ibmmq
    Python语言规范之Pylint的使用
    Python发送SMTP邮件指南
    快看那个运维妹子在学算法【二分查找】
  • 原文地址:https://www.cnblogs.com/yoyo-sincerely/p/6027986.html
Copyright © 2011-2022 走看看