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. Python学习之路8 - 内置方法

    abs(-230) #取绝对值 all([0,1,-5]) #如果参数里面的所有值都为真就返回真,否则返回假 any([0,1,-5]) #如果参数里面有一个值为真则返回真,否则返回假 ascii([ ...

  2. KNY团队与“易校”小程序介绍

    一.团队介绍 “KNY”团队是软件工程专业中的一支充满了斗志,充满了自信的队伍,由三人组成,每个队员都在为我们共同一致的目标而努力:我们三个人的小程序的知识都相对薄弱,但我们不甘落后,一直在努力的学习 ...

  3. 浅谈 Sql Server 触发器

    一.触发器概念 1.1.触发器特征         1.1.1.触发器是在对表进行增.删.改时,自动执行的存储过程.触发器常用于强制业务规则,它是一种高级约束,通过事件进行触发而被执行.        ...

  4. 在服务器中使用 Entity Framework 的 Migration 更新数据库

    在开发环境中,每次我们对要对数据库进行更改,比如增加修改表字段等.改好Entity类后,我们只需在Nuget程序包管理控制台运行 update-database 脚本却可: update-databa ...

  5. (转)微软借力.NET开源跨平台支持,布局物联网平台开发

    今天科技类最大的新闻,莫过于微软宣布.NET开发框架开源计划..NET 开源,集成 Clang 和 LLVM 并且自带 Android 模拟器,这意味着 Visual Studio 这个当下最好没有之 ...

  6. 关于WPS页面横向问题

    上图 即可进行横向竖向页面设置

  7. cat命令和EOF标识输出shell到文件

    在某些场合,可能我们需要在脚本中生成一个临时文件,然后把该文件作为最终文件放入目录中.(可参考ntop.spec文件)这样有几个好处,其中之一就是临时文件不是唯一的,可以通过变量赋值,也可根据不同的判 ...

  8. 分页---Vue+.net+bootstrap实现

    通过学习Vue,的确觉的Vue的双向绑定使用起来十分方便,因此研究了一下列表显示时分页的实现,这里我使用了bootstrap的样式,所以在页面中引用bootstrap的样式文件,后台提数据源使用.ne ...

  9. jquery不能是使用普通的for循环 因为普通的for循环通过下表获取对象 如果通过下表获取对象的话 会转成dom对象

    jquery不能是使用普通的for循环 因为普通的for循环通过下表获取对象 如果通过下表获取对象的话 会转成dom对象

  10. BZOJ 1975 魔法猪学院(A*求K短路)

    显然每次贪心的走最少消耗的路径即可.那么也就是找出最短路,次短路,,,K短路之后消耗E的能量的最多的路径条数. 也就是裸的A*算法. #include <bits/stdc++.h> us ...