zoukankan      html  css  js  c++  java
  • Leetcode题解(29)

    93. Restore IP Addresses

    题目

    分析:多重循环,判断小数点合适的位置

    代码如下(copy网上)

     1 class Solution {
     2 public:
     3     vector<string> restoreIpAddresses(string s) {
     4         vector<string> ret;
     5         if(s.size() > 12)
     6             return ret;
     7         for(int i = 0; i < s.size(); i ++)
     8         {// [0, i]
     9             for(int j = i+1; j < s.size(); j ++)
    10             {// [i+1, j]
    11                 for(int k = j+1; k < s.size()-1; k ++)
    12                 {// [j+1, k], [k+1, s.size()-1]
    13                     string ip1 = s.substr(0, i+1);
    14                     string ip2 = s.substr(i+1, j-i);
    15                     string ip3 = s.substr(j+1, k-j);
    16                     string ip4 = s.substr(k+1);
    17                     if(check(ip1) && check(ip2) && check(ip3) && check(ip4))
    18                     {
    19                         string ip = ip1 + "." + ip2 + "." + ip3 + "." + ip4;
    20                         ret.push_back(ip);
    21                     }
    22                 }
    23             }
    24         }
    25         return ret;
    26     }
    27     bool check(string ip)
    28     {
    29         int value = stoi(ip);
    30         if(ip[0] == '0')
    31         {
    32             return (ip.size() == 1);
    33         }
    34         else
    35         {
    36             if(value <= 255)
    37                 return true;
    38             else
    39                 return false;
    40         }
    41     }
    42 };

     ----------------------------------------------------------------------分割线--------------------------------------------------------------------------

    94. Binary Tree Inorder Traversal

    题目

    分析:二叉树的中序遍历,题目要求不能使用递归,因此为了实现中序遍历,需要使用一个stack,只是在存储节点的 时候,中间节点利用两个NULL包裹起来存放。详细请看代码中的注释,代码如下:

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     vector<int> inorderTraversal(TreeNode* root) {
    13         vector<int> res;
    14         if(root == NULL)
    15             return res;
    16         stack<TreeNode*> myStack;
    17         TreeNode *temp;
    18         myStack.push(root);
    19         while(!myStack.empty())
    20         {
    21             temp = myStack.top();
    22             myStack.pop();
    23             
    24             if(NULL == temp)//表示访问到中间节点了,需要读取val
    25             {
    26                 temp = myStack.top();
    27                 myStack.pop();
    28                 res.push_back(temp->val);
    29                 temp = myStack.top();
    30                 myStack.pop();
    31                 continue;                
    32             }
    33             //右节点push
    34             if(temp->right != NULL)
    35                 myStack.push(temp->right);
    36             
    37             //利用两个NULL把中间节点包裹起来
    38             myStack.push(NULL);
    39             myStack.push(temp);
    40             myStack.push(NULL);
    41             
    42             //左节点push
    43             if(temp->left != NULL)
    44             {                
    45                 myStack.push(temp->left);
    46             }
    47         }
    48         return res;
    49         
    50     }
    51 };

     -------------------------------------------------------------------------------分割线-------------------------------------------------------------------

    95. Unique Binary Search Trees II

    题目

    分析:递归求解,代码如下(copy网上代码)

     1 /**
     2  * Definition for binary tree
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     vector<TreeNode *> generateTrees(int n) {
    13         vector<TreeNode *> res;
    14         if(n==0)
    15         return res;
    16         return Helper(1, n);
    17     }
    18     vector<TreeNode *> Helper(int begin, int end)
    19     {
    20         vector<TreeNode *> ret;
    21         if(begin > end)
    22             ret.push_back(NULL);
    23         else if(begin == end)
    24         {
    25             TreeNode* node = new TreeNode(begin);
    26             ret.push_back(node);
    27         }
    28         else
    29         {
    30             for(int i = begin; i <= end; i ++)
    31             {//root
    32                 vector<TreeNode *> left = Helper(begin, i-1);
    33                 vector<TreeNode *> right = Helper(i+1, end);
    34                 for(int l = 0; l < left.size(); l ++)
    35                 {
    36                     for(int r = 0; r < right.size(); r ++)
    37                     {
    38                         //new tree
    39                         TreeNode* root = new TreeNode(i);
    40                         root->left = left[l];
    41                         root->right = right[r];
    42                         ret.push_back(root);
    43                     }
    44                 }
    45             }
    46         }
    47         return ret;
    48     }
    49 };

     ----------------------------------------------------------------------------分割线---------------------------------------------------------------------

    96. Unique Binary Search Trees

    题目

    分析:这题和95题是一样的,代码如下(copy网上代码):

     1 class Solution {
     2 public:
     3     int numTrees(int n) {
     4         int f[n+1];
     5         memset (f , 0 , sizeof(int)*(n+1));
     6         f[0]=1;
     7         for(int i=1; i<=n; i++)
     8             for(int j=0; j<i; j++)
     9                 f[i] += f[j] * f[i-j-1];
    10         
    11         return f[n];
    12     }
    13 };
  • 相关阅读:
    HttpRunner3.X
    基于C++的ByteBuf封装
    关于matlab的配色
    关于样本方差的无偏估计
    使用Python求解Nonogram
    菜鸡的一些力扣记录
    LeetCode链表练习
    C语言中的链表
    Python中的链表简介
    Nebula Graph 源码解读系列 | Vol.03 Planner 的实现
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/5179381.html
Copyright © 2011-2022 走看看