• 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
  • 相关阅读:
    【常用】source insight常用设置及快捷键
    【Linux学习】配置环境:实现【VirtualBox + ubuntu】+【开启ssh服务】+【putty远程连接到虚拟机】
    javascript:区别浏览器
    linux 之centos6.3 安装中文输入法
    前端优化(静态资源)
    javascript 学习心得!
    编程总结
    2019年春季学期第二周作业
    HTTP could not register URL http://+:8000/testservice/. Your process does not have access rights to this namespace 解决方案
    [原]ASP.NET MVC 3 Razor + jqGrid 示例
  • 原文地址:https://www.cnblogs.com/yoyo-sincerely/p/6027986.html
Copyright © 2020-2023  润新知