1、Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
思路:
关键词:一遍迭代map
建立map,迭代一遍数组,第一个迭代开始检查numToFind是否存在于map中。存在就返回两者的index;
不存在就把当前的数组nums[i]插入到map。重复迭代下去。 C++:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int,int> hash_map;
for(int i=;i<nums.size();i++)
{
int numToFind=target-nums[i];
if(hash_map.find(numToFind)!=hash_map.end())
{
res.push_back(i);
res.push_back(hash_map[numToFind]);
return res;
}
else
hash_map[nums[i]]=i;
}
return res;
}
};

python:

class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
maps={}
for i in range(len(nums)):
if target-nums[i] in maps:
return i,maps[target-nums[i]]
else:
maps[nums[i]]=i
return -1,-1

7、Reverse Integer

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

C++:
class Solution {
public:
int reverse(int x) {
long long res = ;
while(x) {
res = res* + x%;
x /= ;
}
return (res<INT_MIN || res>INT_MAX) ? : res;
}
};

python:

class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
""" if x < 0:
result = (0 - int(str(0-x)[::-1]))
if result <= 2147483647 and result >= -2147483648:
return result
else:
return 0
else:
result = int(str(x)[::-1])
if result <= 2147483647 and result >= -2147483648:
return result
else:
return 0

9、Palindrome Number

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

Example 1:

Input: 121
Output: true

Example 2:

Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Example 3:

Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

Follow up:

Coud you solve it without converting the integer to a string?

C++

//思路:反转后一样

class Solution {
public:
bool isPalindrome(int x) {
if(x<0|| (x!=0 &&x%10==0)) return false;
int sum=0;
int x1=x;
while(x)
{
sum = sum*10+x%10;
x = x/10;
}

return (x1==sum);
}
};

 

python

def isPalindrome(self, x):
if x < 0:
return False
p, res = x, 0
while p:
res = res * 10 + p % 10
p /= 10
return res == x

14、Longest Common Prefix

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

If there is no common prefix, return an empty string "".

Example 1:

Input: ["flower","flow","flight"]
Output: "fl"

Example 2:

Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.

Note:

All given inputs are in lowercase letters a-z.

C++

First one: check from strs[][] to strs[i][]. If matches, check strs[][] to strs[i][].
思路:ans由0开始添加前缀
Code: class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==)
return "";
string ans="";
int max=INT_MAX;
for(auto& s:strs)
{
max=(max>s.length())?s.length():max;
}
for(int i=;i<max;i++)
{
bool flag=true;
char x=strs[][i];
for(auto& s:strs)
{
if(s[i]!=x)
{
flag=false;
break;
}
}
if(flag==false)
return ans;
ans+=x;
}
return ans;
}
}; ////////////////////////////////////////////////// Second one: assume the prefix is strs[]. Compair with strs[i], and cut the letters which don’t match.
ans由最小的串开始不断减少前缀
Code: class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==)
return "";
string ans=strs[];
int max=INT_MAX;
for(auto& s:strs)
{
if(s.length()==)
return "";
int i=;
for(i=;i<ans.length()&&i<s.length();i++)
{
if(s[i]!=ans[i])
break; //跳出整个循环
}
ans=ans.substr(,i);
} return ans;
}
}; //////////////////////////////////// Third one: use a Trie data structure to save the strs. Search the trie, and stops when a TrieNode has more than one son.
数据结构trie
Code: class TrieNode{
public:
bool val;
TrieNode* next[];
int sons;
TrieNode() :val(false), sons()
{
for (int i = ; i < ; i++)
next[i] = nullptr;
}
}; class Trie{
private:
TrieNode* putst(string& s, TrieNode * node, int loc, TrieNode *father)
{
if (s.length() == )
{
node->val = true;
node->sons++;
return node;
}
if (node == nullptr)
{
node = new TrieNode();
if (father != nullptr)
father->sons++;
}
if (loc == s.length())
{
node->val = true;
return node;
}
if (s[loc] >= 'a')
node->next[s[loc] - 'a'] = putst(s, node->next[s[loc] - 'a'], loc + , node);
else
node->next[s[loc] - 'A' + ] = putst(s, node->next[s[loc] - 'A' + ], loc + , node);
return node;
} public:
TrieNode *root;
void insert(string & str){ putst(str, root, , nullptr); }
Trie(){ root = new TrieNode(); }
}; class Solution {
private:
string findPre(TrieNode * node)
{
if (node == nullptr || (node != nullptr&&node->sons > ))
return string("");
int i = ;
for (i = ; i < ; i++)
{
if (node->next[i] != nullptr)
break;
}
if (i == )
return string("");
char temp1 = ((i>) ? ('A' + i) : ('a' + i));
string temp;
temp.insert(temp.begin(), temp1);
if (node->val)
{
return string("");
}
else
{
return temp + findPre(node->next[i]);
}
} public:
string longestCommonPrefix(vector<string>& strs) {
Trie a;
for (auto& str : strs)
a.insert(str);
return findPre(a.root);
}
};

python:good trick

def longestCommonPrefix(strs):
if not strs:
return "" for i, letter_group in enumerate(zip(*strs)): #返回所有字符串各自第一个元素组成的第一组元祖,例如("a","a")
if len(set(letter_group)) > 1:
return strs[0][:i]
else: #如果长度不一样,for在最短的字符串结束并跳到else
return min(strs) strs=["abcd","adef"]
print(longestCommonPrefix(strs))

同c++的第二种方法

 def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
shortest = min(strs,key=len)
for i, ch in enumerate(shortest):
for other in strs:
if other[i] != ch:
return shortest[:i]
return shortest

20、Valid Parentheses

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

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

Example 1:

Input: "()"
Output: true

Example 2:

Input: "()[]{}"
Output: true

Example 3:

Input: "(]"
Output: false

Example 4:

Input: "([)]"
Output: false

Example 5:

Input: "{[]}"
Output: true

C++

class Solution {
public:
bool isValid(string s) {
stack<char> paren;
for (char& c : s) {
switch (c) {
case '(': paren.push(c); break;
case '{': paren.push(c); break;
case '[': paren.push(c); break;
case ')': if (paren.empty() || paren.top()!='(') return false; else paren.pop(); break;
case '}': if (paren.empty() || paren.top()!='{') return false; else paren.pop(); break;
case ']': if (paren.empty() || paren.top()!='[') return false; else paren.pop(); break;
default: ; // pass
}
}
return paren.empty() ;
}
};

python

class Solution:
def isValid(self, s):
stack = []
dict = {"]":"[", "}":"{", ")":"("}
for char in s:
if char in dict.values():
stack.append(char)
elif char in dict.keys():
if stack == [] or dict[char] != stack.pop():
return False
else:
return False
return stack == []

leetcode 1-20 easy的更多相关文章

  1. 【LeetCode算法-20】Valid Parentheses

    LeetCode第20题 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determin ...

  2. LeetCode:20. Valid Parentheses(Easy)

    1. 原题链接 https://leetcode.com/problems/valid-parentheses/description/ 2. 题目要求 给定一个字符串s,s只包含'(', ')',  ...

  3. [Leetcode][Python]20: Valid Parentheses

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 20: Valid Parentheseshttps://oj.leetcod ...

  4. leetcode contest 20

    Q1: 520. Detect Capital Given a word, you need to judge whether the usage of capitals in it is right ...

  5. 【一天一道LeetCode】#20. Valid Parentheses

    一天一道LeetCode系列 (一)题目 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...

  6. LeetCode第[20]题(Java):Valid Parentheses

    题目:有效的括号序列 难度:Easy 题目内容: Given a string containing just the characters '(', ')', '{', '}', '[' and ' ...

  7. LeetCode(20):有效的括号

    Easy! 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭 ...

  8. 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  9. 【Leetcode】【Easy】String to Integer (atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  10. 【Leetcode】【Easy】Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

随机推荐

  1. centos 以太坊多节点私链搭建

    环境  centos 7   搭建 3 个节点的 私链. 第一步 安装 一些依赖的 工具 yum update -y && yum install git wget bzip2 vim ...

  2. 表单控件绑定v-model

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  3. 自动生成DTO(EF框架)

    [0]安装相关工具包 PostgreSQL版本: Npgsql.EntityFrameworkCore.PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL ...

  4. elasticsearch filters特性

    使用filters优化查询 ElasticSearch支持多种不同类型的查询方式,这一点大家应该都已熟知.但是在选择哪个文档应该匹配成功,哪个文档应该呈现给用户这一需求上,查询并不是唯一的选择.Ela ...

  5. 测试是否是移动端,是否是iphone,是否是安卓

    function isMobile(){ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(na ...

  6. SpringData _day02_JPQL和SQL的方式查询

    1.Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,这时就可以使用@Query注解,结合JPQL的语句方式完成查询 JPQ ...

  7. mysql函数替换域名

    UPDATE `pigcms_product` SET info = REPLACE ( info, 'oto.mph88.com', 'www.10000fk.net' ) ;

  8. spark dataframe 将null 改为 nan

    由于我要叠加rdd某列的数据,如果加数中出现nan,结果也需要是nan,nan可以做到,但我要处理的数据源中的nan是以null的形式出现的,null不能叠加,而且我也不能删掉含null的行,于是我用 ...

  9. HBase性能优化方法总结 (转)

    AutoFlush 通过调用HTable.setAutoFlushTo(false)方法可以将HTable写客户端自动flush关闭,这样可以批量写入数据到HBase,而不是有一条put就执行一次更新 ...

  10. osg如何设置抗锯齿(反走样,反锯齿)

    首先抗锯齿是什么? 举个最简单的例子 你用windows画图软件画一根直线(准确说这个叫做线段),当水平或者垂直的时候,如下图,这是绝对完美的 但是当线段出现倾斜时,就无法做到完美了此时就会出现锯齿 ...