344. Reverse String

Write a function that takes a string as input and returns the string reversed.

Example:

Given s = "hello", return "olleh".

class Solution {
public:
string reverseString(string s) {
string::size_type i, j;
if (s.size() == 0)
{
return s;
}
for (i = 0, j = s.size() - 1; i < j; i++, j--)
{
char ch = s[i];
s[i] = s[j];
s[j] = ch;
}
return s;
}
};

记住size_type是unsigned的就可以了

412. Fizz Buzz

Write a program that outputs the string representation of numbers from 1 to n.

But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output “Buzz”. For numbers which are multiples of both three and five output “FizzBuzz”.

Example:

n = 15,

Return:
[
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
"FizzBuzz"
]
class Solution {
public:
vector<string> fizzBuzz(int n) {
vector<string> vec;
for (int i = 1; i <= n; ++i)
{
if (i % 3 == 0 && i % 5 == 0)
{
vec.push_back("FizzBuzz");
}
else if (i % 3 == 0)
{
vec.push_back("Fizz");
}
else if(i % 5 == 0)
{
vec.push_back("Buzz");
}
else
{
stringstream ss;
ss << i;
vec.push_back(ss.str());
}
}
return vec;
}
};

292. Nim Game

You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.





Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.





For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.





Hint:

If there are 5 stones in the heap, could you figure out a way to remove the stones such that you will always be the winner?

最开始的想法:

保存先前的结果,也就是记忆化。

1:win
2:win
3:win
4:lost
5:win
6:win
7:win
8:lost
9:win
10:win
11:win
12:lost
13:win
14:win
15:win
16:lost
17:win
18:win
19:win
20:lost
21:win
22:win
23:win
24:lost
25:win
26:win
27:win
28:lost
29:win
30:win
31:win
32:lost
[Finished in 1.5s]

2 3 4一组,3 4 5一组, 4 5 6一组,这样。

n减去每一组,和先前的结果建立联系。

#include <iostream>
#include <vector>
#include <set>
using namespace std; class Solution {
public:
Solution()
{
for (int j = 7; j <= 100; ++j)
{
canWinNim(j);
}
}
bool canWinNim(int n) {
int i;
bool flag; s.insert(1);
s.insert(2);
s.insert(3);
s.insert(5);
s.insert(6);
//1 2 3 4 5 6特殊处理
if ((n >= 1 && n <= 3) || n == 5 || n == 6)
{
return true;
}
if (n == 4)
{
return false;
}
//1
flag = true;
for (i = 2; i <= 4; ++i)
{
if (s.count(n - i) == 0)
{
flag = false;
break;
}
}
if (flag)
{
s.insert(n);
return true;
}
//2
flag = true;
for (i = 3; i <= 5; ++i)
{
if (s.count(n - i) == 0)
{
flag = false;
break;
}
}
if (flag)
{
s.insert(n);
return true;
}
//3
flag = true;
for (i = 4; i <= 6; ++i)
{
if (s.count(n - i) == 0)
{
flag = false;
break;
}
}
if (flag)
{
s.insert(n);
return true;
}
return false;
}
private:
set<int>s;
};
int main()
{
Solution s;
for (int i = 1; i <= 32; ++i)
{
if (s.canWinNim(i))
{
cout << i << ":win" << endl;
}
else
{
cout << i << ":lost" << endl;
}
}
//int x = 1199886170;
//2147483647
return 0;
}

超时,在这个点1199886170

必然,预处理得超过它。

思考下:但凡两人同时取过过后,剩下的是4,先取的就输了

由上图,对于8,先取的输了

由上图,对于12,先取的输了

16, 20, 24,必然都是先取的输了

class Solution {
public: bool canWinNim(int n) {
if(n % 4 == 0)
{
return false;
}
return true;
} };

367. Valid Perfect Square

Given a positive integer num, write a function which returns True if num is a perfect square else False.

Note: Do not use any built-in library function such as sqrt.

Example 1:

Input: 16
Returns: True

Example 2:

Input: 14
Returns: False

二分查找,对于整数相乘溢出,得做个检测

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <string>
#include <sstream>
#include <cstring>
using namespace std; class Solution {
public:
bool isPerfectSquare(int x) {
if (x == 0 || x == 1)
{
return true;
}
return BinarySearch(x, x);
}
private:
bool BinarySearch(int x, int target)
{
int left = 1;
int right = x / 2;
while(left <= right)
{
int mid = (left + right) / 2;
//溢出
if (mid * mid < 0)
{
right = mid - 1;
}
else if (mid * mid > target || target / mid < mid)
{
right = mid - 1;
}
else if(mid * mid < target)
{
left = mid + 1;
}
else if(mid * mid == target)
{
return true;
}
}
return false;
}
}; int main()
{
Solution s;
cout << s.isPerfectSquare(24);
return 0;
}

leetcode水题题解的更多相关文章

  1. World Finals 2017 (水题题解)

    看大佬做2017-WF,我这种菜鸡,只能刷刷水题,勉强维持生活. 赛后补补水题. 题目pdf链接,中文的,tls翻译的,链接在这里 个人喜欢在vjudge上面刷题. E Need for Speed ...

  2. bzoj usaco 金组水题题解(2)

    续.....TAT这回不到50题编辑器就崩了.. 这里塞40道吧= = bzoj 1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害 比较经典的最小割?..然而 ...

  3. bzoj usaco 金组水题题解(2.5)

    bzoj 2197: [Usaco2011 Mar]Tree Decoration 树形dp..f[i]表示处理完以i为根的子树的最小时间. 因为一个点上可以挂无数个,所以在点i上挂东西的单位花费就是 ...

  4. bzoj usaco 金组水题题解(1)

    UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT. ...

  5. Cmd2001的毒瘤水题题解

    怕不是我再不写题解这题就该成没人做也没人会的千古谜题了...... T1: 仔细分析题面,发现相同就是广义SAM上节点相同,相似就是广义SAM上为从根到某个点路径的前缀..直接SAM上跑从根开始,每个 ...

  6. 2006-2007 ACM-ICPC | POJ3380 POJ3384 POJ3385 水题题解

    // CF比赛链接:http://codeforces.com/gym/101650 // POJ链接:http://poj.org/searchproblem?field=source&ke ...

  7. leetcode水题(一)

    Two Sum 1 public int[] twoSum(int[] numbers,int target){ Map<Integer,Integer> map = new HashMa ...

  8. LOJ6303:水题——题解

    https://loj.ac/problem/6303 题目来自LOJ. 就记一个公式,设f(n,k)为n!里分解得到的k(k为质数)的个数,则f(n,k)=f(n/k,k)+n/k. 证明很好证,显 ...

  9. 看完互联网大佬的「LeetCode 刷题手册」, 手撕了 400 道 Leetcode 算法题

    大家好,我是 程序员小熊 ,来自 大厂 的程序猿.相信绝大部分程序猿都有一个进大厂的梦想,但相较于以前,目前大厂的面试,只要是研发相关岗位,算法题基本少不了,所以现在很多人都会去刷 Leetcode ...

随机推荐

  1. 异常记录——bat批处理闪退

    bat批处理闪退 bat描述 我的博客每次更新需要跑多个命令 clean(清除旧文)+g(生成新文)+d(部署到服务器),作为一个懒惰的程序员,自然要写一个bat一键完成 E: cd blog hex ...

  2. MySQL之非空约束(NOT NULL)

    定义: MySQL非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现.在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不 ...

  3. C#录制视频

    这是一个使用C#语言制作的录制框架,支持录制桌面,多屏,声音,摄像头,某个应用程序的界面 1.安装 使用此框架需要安装扩展包Kogel.Record,可以Nuget上搜索 或者使用Nuget命令 In ...

  4. React实现座位排布组件

    React实现座位排布组件 最近在开发一个影院系统的后台管理系统,该后台可以设置一个影厅的布局. 后台使用的是react框架,一位大神学长在几天之内就把这个控件研究出来了,并进行了较为严密的封装,佩服 ...

  5. cassandra中的ACID,与RDBMS中的事务有何不同?

    Cassandra中的ACID标准 Apache Cassandra不遵循具有回滚或锁定机制的ACID(原子性,一致性,隔离性,持久性)事务,而是提供原子,隔离和持久的事务,并具有最终和可调的一致性, ...

  6. vue根据选择的月份动态展示当前月份的每一天并展示每一天所对应的星期几

    我们在开发过程中所遇到的所有的奇奇怪怪的交互美其名曰用(奇)户(葩)体(需)验(求),而产品所谓的良好的交互效果,在我等开发人员眼里不值一提.不屑一顾.讨厌至极! 对于这样的需求,我通常都是: 但胳膊 ...

  7. mongodb学习(一)——简介和基本操作

    简介 MongoDB 是一个基于分布式文件存储的数据库 属于NoSQL数据库,是介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的 旨在为WEB应用提供可扩展的高性 ...

  8. cogs 495. 滑动窗口 单调队列

    495. 滑动窗口 ★★   输入文件:window.in   输出文件:window.out   简单对比时间限制:2 s   内存限制:256 MB [问题描述] 给你一个长度为N的数组,一个长为 ...

  9. 【C_Language】---最全面的C指针总结,初级程序员必备

    好久没写博客了,重新学习C语言了的基础课程,发现很多东西都忘记的差不多了,闲来无事,总结一下关于指针的知识,希望能帮到像我一样的菜鸟们: 指针,众所周知是C语言的精华所在,不懂指针的话,你就不要说你学 ...

  10. dp - 循环数组的最大和

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...