zoukankan      html  css  js  c++  java
  • 那些让你觉得自己是个傻B的题目集锦(大神的降维打击合集)

    一起过来排好队,进来挨打

    1.Leetcode tag-LinkList [109.convert sorted list to binary search tree](#109.convert sorted list to binary search tree)
    2Leetcode tag-Array[386. Lexicographical Numbers](#386. Lexicographical Numbers)

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    /**
     * 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:
        TreeNode* sortedListToBST(ListNode* head) {
            return RecursionListToBST(head,NULL);
        }
        TreeNode* RecursionListToBST(ListNode* head,ListNode *tail){
            // linklist is empty
            if(head==tail)
                return NULL;
            // only one node in the tree
            if(head->next==tail){
                TreeNode *root=new TreeNode(head->val);
                return root;
            }
            // search the middle node 
            // excllent code segment need memorize.
            ListNode *mid=head;
            ListNode *temp=head;
            while(temp!=tail && temp->next!=tail){
                mid=mid->next;
                temp=temp->next->next;
            }
            TreeNode *root=new TreeNode(mid->val);
            root->left=RecursionListToBST(head,mid);
            root->right=RecursionListToBST(mid->next,tail);
            return root;
        }
    };
    
    // 寻找链表中点这个真的是棒
    
     ListNode *mid=head;
     ListNode *temp=head;
     while(temp!=tail && temp->next!=tail){
             mid=mid->next;
             temp=temp->next->next;
      }
    

    386. Lexicographical Numbers 按字典进行排序

    这种解决问题的思考方式

    class Solution {
    public:
        vector<int> lexicalOrder(int n) {
            vector<int> res(n);
            int cur=1;
            for(int i=0;i<n;i++)    //进行循环遍历
            {
                res[i]=cur;
                if(cur*10<=n)
                    cur*=10;     // 进行倍数更新
                else
                {
                    if(cur>=n)
                        cur/=10;
                    cur+=1;      //保持自增
                    while(cur%10==0)
                        cur/=10;
                }
            }
            return res;
        }
    };
    
    不要用狭隘的眼光看待不了解的事物,自己没有涉及到的领域不要急于否定. 每天学习一点,努力过好平凡的生活.
  • 相关阅读:
    2015.07-2015.08
    the last lecture
    强化的单例属性_Effective Java
    Socket通信客户端设计(Java)
    静态工场方法代替构造器
    如何控制Java中的线程,总结了3种方法...
    如何快速转型,比如C#...to...Java
    C#中var和dynamic
    How to use the Visual Studio
    mark blog
  • 原文地址:https://www.cnblogs.com/GeekDanny/p/10092336.html
Copyright © 2011-2022 走看看