Nim Game,Reverse String,Sum of Two Integers
下面是今天写的几道题:
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.
bool canWinNim(int n) {
if ( <n && n< ) return true;
else if(n==) return false;
else return n% != ;
}
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的更多相关文章
- Redis 命令,键(key),字符串(String),哈希(Hash),列表(List),集合(Set)(二)
Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. ...
- Object c的NSString的使用,创建,拼接和分隔,子string,substring
main: // // main.m // StringDemo // // Created by 千 on 16/9/22. // Copyright © 2016年 kodulf. All ...
- 把List<string>集合,编程string,并以“,”号分割
List<int> roleIdList = GetRoleIdList(user.ID); string roleIdsStr = ""; if (roleIdLis ...
- Delphi在创建和使用DLL的时候如果使用到string,请引入ShareMem单元
当使用了长字符串类型的参数.变量时,如string,要引用ShareMem. 虽然Delphi中的string功能很强大,但若是您编写的Dll文件要供其它编程语言调用时,最好使用PChar类型.如果您 ...
- python3.x Day4 内置方法,装饰器,生成器,迭代器
内置方法,就是python3提供的各种函数,可以认为是关键字,帮助进行一些列的牛x运算. abs()#取绝对值 all([])#可迭代对象中的所有元素都为True 则为True,只要至少一个为Fals ...
- 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
继承 概念: ① 继承背后的思想就是基于已存在的类来构建新类; ② 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③ 当从其它类导出的类叫作子 ...
- gvim -- 跳转命令,查找格式,正则
1.跳转命令 ‘w'单词前进,'b'单词后退,'e'单词前进,‘ge’单词后退,存在单词词首词尾区别,'W''B''E''gE'将不以单词区分,以空格区分 ‘$’行尾,'^'非空白行首,'0'行首 ‘ ...
- 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) { ...
- 【JavaScript框架封装】使用Prototype给Array,String,Function对象的方法扩充
/* * @Author: 我爱科技论坛* @Time: 20180705 * @Desc: 实现一个类似于JQuery功能的框架* V 1.0: 实现了基础框架.事件框架.CSS框架.属性框架.内容 ...
随机推荐
- 码农带你区分String类型的"=="和equals()
大家玩csdn也可以关注我的博客额http://blog.csdn.net/wujiandong25253344 情形一: String s1= new String("hello" ...
- Spring事务传播机制&隔离级别
一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_ ...
- css添加样式的四种方式
1. 导入样式:在 .css文件中使用@import url("...")来引入另一个css样式表 2. 外部样式:在html页面中的head中使用 link 标签引入,如< ...
- 富文本编辑器kindeditor配置
<!--富文本编辑器kindeditor配置↓ --> <link type="text/css" rel="stylesheet" href ...
- nginx 基本操作
nginx 是什么 nginx 是轻量.高性能的网页服务器,相较 Apache 占有内存小. 下载 https://nginx.org/en/download.html 默认根目录 安装目录下的 ht ...
- jquery trigger-bind示例
$('#btnSearch').bind('click',function(){ .....}) 然后用trigger来激活事件:$('#btnSearch').trigger('click');
- UE4 材质切换(带动画效果)
先看效果图:小木块掉到地板上(小木块本身会消失掉),地板就开始了动效材质切换.引擎版本用的是4.11.2 方法步骤: 首先在UE4内容浏览器中新建一个材质. 第一步要实现一个扫光的效果,如下图. 实现 ...
- Web集群缓存一致性的思考
共享cache+数据库实现缓存一致性: 1.1 memcache + mongo+定时器 1.1.1 memcache 优点:web集群共享数据 缺点:数据生命周期的不可预估性 1.1.2 mongo ...
- pptp 之 静态路由
上网的人总是离不开VPN,你们都懂得.以前总是买付费的VPN,慢的要死,还不便宜.于是就自己买了个国外VPS 搭建了个PPTP,超级简单.网上教程大把大把的. VPN是全局代理,上google啥的没毛 ...
- Hibernate配置log4j日志环境
1.准备所需的jar 说明:具体所使用的jar包的版本与你所使用的Hibernate版本有关,我用的是(hibernate-release-4.3.11.Final) <1>准备slf4j ...