下面是今天写的几道题:

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.
 bool canWinNim(int n) {
if ( <n && n< ) return true;
else if(n==) return false;
else return n% != ;
}
 
344. Reverse String
Write a function that takes a string as input and returns the string reversed.
1.C++ code  Runtime:12ms
 class Solution {
public:
string reverseString(string s) {
reverse(s.begin(),s.end());
return s;
}
};

2.C code  Runtime:4ms

 char* reverseString(char* s) {
int len = strlen(s);
for(int i=;i<len/;i++)
{
char tempc = s[i];
s[i] = s[len--i];
s[len--i] = tempc;
}
return s;
}

371. Sum of Two Integers

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -

这道题自己虽然知道要用位运算但是一开始没想出来,下边的方法借鉴网上,原文地址http://www.cnblogs.com/la0bei/p/5659829.html

 int main()
{
int a,b,c;
cin >> a >> b;
while(b)
{
c = a^b;
b = (a&b)<<;
a = c;
}
cout << a << endl;
system("pause");
}

--------------------------------------------------------------------------------------------------------------------------------------------------------

下边这个方法按道理是不符合题目的,题中要求不使用+-符号,但是这竟然在LeetCode上ac了,我这个代码需要小心边界即负数最小值。

 //整数转换为二进制数组
int intToBit(int *str,long long num)
{
int i=;
do
{
str[i++] = num%;
num = num/;
}while(num>); return i;
}
//负数的话二进制取反+1
void reverdBitAdd1(int *str,int *num)
{
//取反
int temp = *num;
while(temp--) str[temp] = ( (str[temp] == )? : ); //负数需要反转+1;
int sum = ;
for(int i=;i<*num;i++)
{
sum += str[i];
str[i] = sum%;
sum = sum/;
}
str[*num] = ;
(*num)++;
} //两个二进制相加
int bitAdd(int *sumbit,int*a,int sizea,int*b,int sizeb)
{
int sum = ;
int num = (sizea>sizeb?sizea:sizeb);
for (int i=;i<num;i++)
{
sum +=(a[i]+b[i]);
sumbit[i] = sum%;
sum /=;
}
if (sum ==) sumbit[num++] = ;
return num;
} //将二进制转换为十进制
int sumBit(int *bitNum, int n)
{
int sum = ;
int bit2 = ;
for(int i=;i<n;i++)
{
sum += bitNum[i]*bit2;
bit2 *=;
}
return sum;
} int getSum(int a, int b) {
//定义存储结果的sum,标识a,b的符号的falg
int sum = ,flaga = ,flagb = ;
//定义存储ab以及相加后的二进制数组
int bita[] = {};
int bitb[] = {};
int sumbit[] = {};
//考虑a,b可能为负数最小值
long long la = a;
long long lb = b;
//先按无符号位处理
if(la<)
{
la = -la;
flaga = ;
} if(lb<)
{
lb = -lb;
flagb = ;
} int sizea = intToBit(bita,la);
int sizeb = intToBit(bitb,lb); //如果符号相同直接相加
if(flaga == flagb)
{
int num = bitAdd(sumbit,bita,sizea,bitb,sizeb);
sum = sumBit(sumbit,num);
if(flaga == ) sum = -sum;
}
//如果a是负数
else if(flaga == )
{
//先将a反转+1,此时a多了个符号位
reverdBitAdd1(bita,&sizea);
while(sizea<sizeb)//补齐负数位
{
bita[sizea++] = ;
}
int num = bitAdd(sumbit,bita,sizea,bitb,sizeb);
if(sizeb>sizea-) sum = sumBit(sumbit,num-);//正数二进制位多
else if(sizea->sizeb)//负数符号位多
{
num--;
reverdBitAdd1(sumbit,&num);
sum = -sumBit(sumbit,num-);
}
else if(sizea- == sizeb)//不包括符号位两个位数一样多
{
if(sumbit[num] == ) sum = -sumBit(sumbit,num-);
else sum = sumBit(sumbit,num-);
}
}
else if(flagb == )
{
reverdBitAdd1(bitb,&sizeb);
while(sizeb<sizea)
{
bitb[sizeb++] = ;
}
int num = bitAdd(sumbit,bita,sizea,bitb,sizeb);
if(sizea>sizeb-) sum = sumBit(sumbit,num-);
else if(sizeb->sizea)
{
num--;
reverdBitAdd1(sumbit,&num);
sum = -sumBit(sumbit,num-);
}
else if(sizeb- == sizea)
{
if(sumbit[num] == ) sum = -sumBit(sumbit,num-);
else sum = sumBit(sumbit,num-);
}
}
return sum;
}

Nim Game,Reverse String,Sum of Two Integers的更多相关文章

  1. Redis 命令,键(key),字符串(String),哈希(Hash),列表(List),集合(Set)(二)

      Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. ...

  2. Object c的NSString的使用,创建,拼接和分隔,子string,substring

    main: // //  main.m //  StringDemo // //  Created by 千 on 16/9/22. //  Copyright © 2016年 kodulf. All ...

  3. 把List<string>集合,编程string,并以“,”号分割

    List<int> roleIdList = GetRoleIdList(user.ID); string roleIdsStr = ""; if (roleIdLis ...

  4. Delphi在创建和使用DLL的时候如果使用到string,请引入ShareMem单元

    当使用了长字符串类型的参数.变量时,如string,要引用ShareMem. 虽然Delphi中的string功能很强大,但若是您编写的Dll文件要供其它编程语言调用时,最好使用PChar类型.如果您 ...

  5. python3.x Day4 内置方法,装饰器,生成器,迭代器

    内置方法,就是python3提供的各种函数,可以认为是关键字,帮助进行一些列的牛x运算. abs()#取绝对值 all([])#可迭代对象中的所有元素都为True 则为True,只要至少一个为Fals ...

  6. 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法

    继承 概念: ①   继承背后的思想就是基于已存在的类来构建新类; ②   当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③   当从其它类导出的类叫作子 ...

  7. gvim -- 跳转命令,查找格式,正则

    1.跳转命令 ‘w'单词前进,'b'单词后退,'e'单词前进,‘ge’单词后退,存在单词词首词尾区别,'W''B''E''gE'将不以单词区分,以空格区分 ‘$’行尾,'^'非空白行首,'0'行首 ‘ ...

  8. LeetCode Javascript实现 344. Reverse String 292. Nim Game 371. Sum of Two Integers

    344. Reverse String /** * @param {string} s * @return {string} */ var reverseString = function(s) { ...

  9. 【JavaScript框架封装】使用Prototype给Array,String,Function对象的方法扩充

    /* * @Author: 我爱科技论坛* @Time: 20180705 * @Desc: 实现一个类似于JQuery功能的框架* V 1.0: 实现了基础框架.事件框架.CSS框架.属性框架.内容 ...

随机推荐

  1. 码农带你区分String类型的"=="和equals()

    大家玩csdn也可以关注我的博客额http://blog.csdn.net/wujiandong25253344 情形一: String s1= new String("hello" ...

  2. Spring事务传播机制&隔离级别

    一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_ ...

  3. css添加样式的四种方式

    1. 导入样式:在 .css文件中使用@import url("...")来引入另一个css样式表 2. 外部样式:在html页面中的head中使用 link 标签引入,如< ...

  4. 富文本编辑器kindeditor配置

    <!--富文本编辑器kindeditor配置↓ --> <link type="text/css" rel="stylesheet" href ...

  5. nginx 基本操作

    nginx 是什么 nginx 是轻量.高性能的网页服务器,相较 Apache 占有内存小. 下载 https://nginx.org/en/download.html 默认根目录 安装目录下的 ht ...

  6. jquery trigger-bind示例

    $('#btnSearch').bind('click',function(){ .....}) 然后用trigger来激活事件:$('#btnSearch').trigger('click');

  7. UE4 材质切换(带动画效果)

    先看效果图:小木块掉到地板上(小木块本身会消失掉),地板就开始了动效材质切换.引擎版本用的是4.11.2 方法步骤: 首先在UE4内容浏览器中新建一个材质. 第一步要实现一个扫光的效果,如下图. 实现 ...

  8. Web集群缓存一致性的思考

    共享cache+数据库实现缓存一致性: 1.1 memcache + mongo+定时器 1.1.1 memcache 优点:web集群共享数据 缺点:数据生命周期的不可预估性 1.1.2 mongo ...

  9. pptp 之 静态路由

    上网的人总是离不开VPN,你们都懂得.以前总是买付费的VPN,慢的要死,还不便宜.于是就自己买了个国外VPS 搭建了个PPTP,超级简单.网上教程大把大把的. VPN是全局代理,上google啥的没毛 ...

  10. Hibernate配置log4j日志环境

    1.准备所需的jar 说明:具体所使用的jar包的版本与你所使用的Hibernate版本有关,我用的是(hibernate-release-4.3.11.Final) <1>准备slf4j ...