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. 反编译之paktool工具

    1.官网配置mac教程https://ibotpeaches.github.io/Apktool/install/ (1)右键选择:链接储存为(命名:apktool,格式:选择所有文件): (2)下载 ...

  2. Cesium官方教程13--Cesium和Webpack

    原文地址:https://cesiumjs.org/tutorials/cesium-and-webpack/ Cesium 和 Webpack Webpack是非常强大非常流行的JavaScript ...

  3. mysql 乐观判断 校验

    说下场景, 用户账户 有 100 元钱,  他执行了两个操作,  A操作发红包发了80块钱, B操作 发红包 发了 70 ,并发, 假如没有 冻结这一说法,  两个操作都是去 查询余额, 还有100 ...

  4. 10-2-点击生成10个div

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. [计蒜之道2019 复赛 A]外教 Michale 变身大熊猫

    [计蒜之道2019 复赛 A]外教 Michale 变身大熊猫 Online Judge:2019计蒜之道 复赛 A Label:LIS+线段树.树状数组+快速幂(模逆元) 题目描述 题解: pre. ...

  6. object and namespace

    http://effbot.org/zone/python-objects.htm 几点总结: (1) 类的基本属性 . id, returned by id(obj) . type, returne ...

  7. 【DM8168学习笔记3】CodSourcery GCC Tool Chain安装过程记录

    eagle@eagle-desktop:~$ cd/home/eagle/desktop eagle@eagle-desktop:~/desktop$ cd./vboxshared eagle@eag ...

  8. DLL编程总结

    进行DLL的编程主要涉及到两个方面的问题,一个是要保证DLL中要导出的函数名不被编译器不可控地更改(在C++中由于重载机制的存在,会造成程序被编译时函数名被改变),其实就是要保证DLL导出的函数名与使 ...

  9. Python的几个高级编程技巧

    Python有一些技巧对你来说是新知识,但是还有一些技巧会让你的代码效率大幅提升. 本文总结了一下自己用到的一些Python高级编程技巧,希望对大家有帮助. 列表生成器 a=[1,2,3] [x*x ...

  10. vscode, eslint, prettier, vetur冲突及解决

    这3工具都必须安装. 但是安装之后, 规则冲突又让人头疼. 讲下解决方案吧.一 从0开始1. 禁止工作区插件, 如下图:  2. 清空用户设置(Code–>首选项–>设置–>[右上角 ...