lettcode笔记--Valid Parentheses

20.Valid Parentheses

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

用栈来实现,参考:http://blog.csdn.net/feliciafay/article/details/17408469

22. Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]
解答:用二叉树递归方法来实现,参考: http://blog.csdn.net/fly_yr/article/details/48754087
只有当右边括号数目小于左边括号数目时,才可以添加右括号。
class Solution {
private:
    void generateParenthesis1(vector<string>&v,string s,int l,int r){
        if(l==0&&r==0)
            {
                v.push_back(s);
                return;
            }
        if(l>0)
            generateParenthesis1(v,s+"(",l-1,r);
        if(r>0&&l<r)
            generateParenthesis1(v,s+")",l,r-1);
    }

public:
    vector<string> generateParenthesis(int n) {
        if(n==0)
            return vector<string>();

        vector<string> v;
        generateParenthesis1(v,"",n,n);
        return v;
    }

};

  

89.Gray code 

The gray code is a binary numeral system where two successive values differ in only one bit.

Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

00 - 0
01 - 1
11 - 3
10 - 2
(看不太懂。。)
参考:http://www.cnblogs.com/jdneo/p/5228780.html

35. Search Insert Position
终于有一道会做的题目了好开心!!

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

 在一个排好序的数组中查找某个值,存在则返回对应的value,不存在则返回能够插入的数组中的下标,其实就是找到第一个大于等于目标值的下标,用二分法查找。

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int low=0;
        int high=nums.size()-1;
        int mid=0;
        while(low<=high){
            mid=low+(high-low)/2;
            if(target<=nums[mid])
                high=mid-1;
            else
                low=mid+1;
        }
         return low;
    }   
};

  

 14. Longest Common Prefix--找最长前缀。这里string[j]=0为什么就可以截断了呀?

Write a function to find the longest common prefix string amongst an array of strings.

#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>

using namespace std;

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.size()==0) return "";
        char* str=(char*)malloc(sizeof(char)*(strs[0].size()+1));
        for(int i=0;i<strs[0].size();i++){
            str[i]=strs[0][i];
        }
        str[strs[0].size()]=0;
        for(int i=1;i<strs.size();i++){
            int j=0;
            while(str[j]&&strs[i][j]&&str[j]==strs[i][j])
                j++;
            str[j]=0;
        }
        return string(str);
    }
};

int main()
{
    Solution sl;

    vector<string> s;
    s.push_back("abcd");
    s.push_back("abdff");
    string str=sl.longestCommonPrefix(s);
    if(str=="")
        str="无解";
    cout<<"this is the end of "+str<<endl;
    system("pause");
    return 0;
}
 
原文地址:https://www.cnblogs.com/bananaa/p/7364208.html