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
  • 相关阅读:
    【JDK】:java.lang.Integer源码解析
    使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
    Android Button.getWidth()为0的问题
    nacos启动报错nacos Unable to start web server;
    Oracle字符集相关学习笔记记录
    Oracle触发器简单使用记录
    Oracle分析函数、窗口函数简单记录汇总
    Oracle远程数据建物化视图(materialized)创建简单记录,以及DBLINK的创建
    Oracle 行列转换函数pivot、unpivot的使用(二)
    Oracle递归查询(start with…connect by prior)
  • 原文地址:https://www.cnblogs.com/yoyo-sincerely/p/6027986.html
Copyright © 2011-2022 走看看