58. 最后一个单词的长度

分析:找最后一个非空格,向前找

int lengthOfLastWord(string s) {
int i = s.find_last_not_of(' ');
int j = i;
for(;j >= ; j--){
if(s[j] == ' ')
break;
}
return i - j;
}

7. 颠倒整数

分析:注意题意,超范围 LL ,结尾去0

int reverse(int x) {
long long res = ;
if(x!=){
while(!x%){
x /= ;
}
}
while(x){
res *= ;
res += x % ;
x /= ;
}
if(res> INT_MAX || res < -INT_MAX){
res = ;
}
return res;
}

13. 罗马数字转整数

分析:罗马数字共有7个,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。按照下述的规则可以表示任意正整数。需要注意的是罗马数字中没有“0”,与进位制无关。一般认为罗马数字只用来记数,而不作演算。

字母对应数字相加,后面字母比前面字母大代表前面字母需要减去

被减的字母最多一个!

int singleCharToInt(char x){
int num = -;
if(x == 'i')
num = ;
else if(x == 'v')
num = ;
else if(x == 'x')
num = ;
else if(x == 'l')
num = ;
else if(x == 'c')
num = ;
else if(x == 'd')
num = ;
else if(x == 'm')
num = ;
return num;
}
int romanToInt(string s) {
int len = s.size();
transform(s.begin(), s.end(), s.begin(), ::tolower);
int res = ;
for(int i=;i<len;i++){
int num=singleCharToInt(s[i]);
if(singleCharToInt(s[i+]) > num){
num=(-)*num;
}
res += num;
}
return res;
}

38. 数数并说

分析:步步迭代

整数字符串转换

string fun(string s){
string tmp = "";
int len = s.size();
int con =;
char t ;
for(int i=;i<len;){
t=s[i++];con = ;
while(s[i] == t){
con++; i++;
}
ostringstream stream;
stream<<con; //n为int类型
tmp =tmp + stream.str();
tmp+=t;
}
return tmp;
}
string countAndSay(int n) {
string s="";
int en = s.size();
int con =;
while(--n){
s=fun(s);
//cout<<s<<endl;
}
return s;
}

67. 二进制求和

分析:对齐,相加,首位进位处理

string addBinary(string a, string b) {
//对齐
int lena = a.size(), lenb = b.size();
int n = abs(lena - lenb);
string tmp(n,'');
if(lena < lenb) { a = tmp + a; }
if(lena > lenb) { b = tmp + b; }
//加法
int len = a.size();
int x = , c = ; // 计算结果,进位标记
for(int i = len - ; i >= ; --i){
x = a[i] - '' + b[i] -'' + c;
if( x > ){
c = ;
x -= ;
}
else{
c = ;
}
a[i] = (char)('' + x );
}
if(c) //首部进位
a = "" + a;
return a;
}

14. 最长公共前缀

分析:拿第一个字符串作为标准,遍历所有字符串,期间不断缩小条件

string longestCommonPrefix(vector<string>& strs) {
int len = strs.size(),lenS = ;
if( == len)
return "";
string s = strs[];
for(int i=; i<len; ++i){
lenS = s.length();
for(int j=; j<lenS; ++j){
if(s[j] != strs[i][j]){
s = s.substr( , j); //对比所有字符串,不断缩减条件
break;
}
}
}
return s;
}

20. 有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

括号必须以正确的顺序关闭,"()" 和 "()[]{}" 是有效的但是 "(]" 和 "([)]" 不是。

分析:栈的应用

我用的比较别扭

每次压入一个字符,深入栈内看是否还有配对成功的括号可以弹出

最终所有配对成功的话,栈为空

bool isValid(string s) {
stack<char> stack_tmp;
int len = s.length();
char x,y;
stack_tmp.push(s[]);
for(int i=; i<len; i++){
stack_tmp.push(s[i]);
while(stack_tmp.size()>=){ //要想配对成功,至少有两个
y = stack_tmp.top();
stack_tmp.pop();
x = stack_tmp.top(); //取两数
if(')' == y && x == '('){
stack_tmp.pop();
}
else if('}' == y && x == '{'){
stack_tmp.pop();
}
else if(']' == y && x == '['){
stack_tmp.pop();
}
else{
stack_tmp.push(y); //不行,再压回去
break;
}
}
}
return stack_tmp.empty();
}

29. 两数相除

不使用乘号,除号和取模符号将两数相除。如果溢出返回 MAX_INT。

感谢:https://www.liuchuo.net/archives/3140

//1. 利用 a/b = exp(log(a)-log(b))  //注意定义域>0 需取绝对值,并抽取符号位(抑或运算用的巧妙)
//2. 注意越界情况,可能分母==0 可能负数反号
int divide(int dividend, int divisor) {
if(divisor == || dividend == INT_MIN && divisor == -) return INT_MAX; //溢出两种情况
int sign = ((dividend >> ) ^ (divisor >> )) == ? : -; //符号位 判断
long a = abs((long)dividend);
long b = abs((long)divisor);
double c = exp(log(a) - log(b)) + 0.0000000001;
return (int)(sign * c);
}

125. 验证回文字符串

给定一个字符串,确定它是否是回文,只考虑字母数字字符和忽略大小写。

例如:
"A man, a plan, a canal: Panama" 是回文字符串。
"race a car" 不是回文字符串。

注意:
你有考虑过这个字符串可能是空的吗? 在面试中这是一个很好的问题。

针对此题目,我们将空字符串定义为有效的回文字符串。

分析:空串处理、提取主要字符串、双向搜索判断

bool isPalindrome(string s) {
if (""== s) return true; //1. deal with empty string
int len = s.length();
string tmp="";
for(int i=; i <len; i++){ //2. filter string
if(s[i]>='A' &&s[i]<='Z'){
tmp +=s[i] +;
}
if((s[i]>='a'&& s[i]<='z') ||(s[i] >='' &&s[i] <='')){
tmp +=s[i];
}
}
len = tmp.length();
int m = (len +)/;
for (int i=; i <= m; i++) { //3. Bidirectional search
if(tmp[i] != tmp[len -i -])
return false;
}
return true;
}

leetcode 刷题日志 2018-03-26的更多相关文章

  1. leetcode 刷题日志 2018-3-28

    树: 404. 左叶子之和 求所有左叶子结点之和 . 递归法 分析:递归法遍历结点,找左叶子结点 空指针判断 有左子节点?是叶子结点?是的话更新value的值 int sumOfLeftLeaves( ...

  2. LeetCode刷题指南(字符串)

    作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...

  3. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  4. C#LeetCode刷题-设计

    设计篇 # 题名 刷题 通过率 难度 146 LRU缓存机制   33.1% 困难 155 最小栈 C#LeetCode刷题之#155-最小栈(Min Stack) 44.9% 简单 173 二叉搜索 ...

  5. C#LeetCode刷题-排序

    排序篇 # 题名 刷题 通过率 难度 56 合并区间   31.2% 中等 57 插入区间   30.4% 困难 75 颜色分类   48.6% 中等 147 对链表进行插入排序   50.7% 中等 ...

  6. C#LeetCode刷题-贪心算法

    贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配   17.8% 困难 45 跳跃游戏 II   25.5% 困难 55 跳跃游戏   30.6% 中等 122 买卖股票的最佳时机 II C ...

  7. C#LeetCode刷题-栈

    栈篇 # 题名 刷题 通过率 难度 20 有效的括号 C#LeetCode刷题之#20-有效的括号(Valid Parentheses) 33.0% 简单 42 接雨水   35.6% 困难 71 简 ...

  8. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% ...

  9. C#LeetCode刷题-二分查找​​​​​​​

    二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

随机推荐

  1. AVL树 算法思想与代码实现

    AVL树是高度平衡的二叉搜索树,按照二叉搜索树(Binary Search Tree)的性质,AVL首先要满足: 若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不为空, ...

  2. c# 画一个报告

    填充控件的grafics属性: private void printReportPage(object sender, System.Drawing.Printing.PrintPageEventAr ...

  3. SSD/Memory技术学习拼图

    "打酱油"解读SLC缓存新技术[http://www.pceva.com.cn/article/3612-1.html] 固态硬盘主控将消亡?未来高性能固态硬盘长这样[http:/ ...

  4. HDU 5391Z ball in Tina Town 数论

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5391 bc:  http://bestcoder.hdu.edu.cn/contests/c ...

  5. 如何解决Unsupported Architecture. Your executable contains unsupported architecture '[x86_64, i386]

    APP改版测试后准备Archive发布时,结果居然出现题目中的错误提示.查了一下,如果archive的时候没有选[iOS](http://lib.csdn.net/base/ios)  Devices ...

  6. 【leetcode】215. Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  7. 使用java程序模拟页面发送http的post请求

    在web应用程序中,一般都是通过页面发送http的post请求,但也可以使用java程序来模拟页面发送请求,代码如下: import java.io.BufferedReader; import ja ...

  8. 出现脚本错误或者未正确调用 Page()

    pages/xxxx/xxxx.js 出现脚本错误或者未正确调用 Page() 自己创建的小程序出现上面报错,可能是因为 xxxx.js是一个空文件,所以才会出现未正确调用: 如果是空文件的话,解决办 ...

  9. HDU3507_Print Article

    这个题目又是一个典型的dp斜率优化的题目.题意是给你n个数,你需要做的是把这个n个数分为连续的若干段,每段的权值为这段数字的和的平方加上M.求最小的总权值. 我们可以根据题意写出朴素版的dp状态转移方 ...

  10. P4623 [COCI2012-2013#6] BUREK

    题目描述 给定N个三角形,和M条直线,直线要么平行于X轴,要么平行于Y轴,问这M条直线 分别经过多少个三角形内部 (注意是内部即分开的两个多边形的面积均大于零). 输入输出格式 输入格式: 第一行一个 ...