版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
38.报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
思路:对前一个数进行报数,首先遍历n,把从2开始记录n的每个数,通过遍历字符串求解遍历的每个数
var countAndSay = function(n) {
if(n==1) return "1";
var str="11";
for(var i=2;i<n;i++){
var newStr="";
var num=1;
//遍历前一字符串
for(var j=0;j<str.length;j++){
if(str.charAt(j)==str.charAt(j+1)){
num++;
}else{
newStr+=num+str.charAt(j);
num=1;
}
}
str=newStr;
}
return str;
};
67.二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
思路:翻转字符串,然后从第一个进行比较。
var addBinary = function(a, b) {
var res=[];
var flag="0";
//翻转字符串
a=a.split("").reverse();
b=b.split("").reverse();
while(a.length&&b.length){
//如果都是0结果取决于是否有进位值
if(a[0]=="0"&&b[0]=="0"){
res.push(flag);
flag="0";
//如果都是1,进一位结果为多少取决于是否有进位值
}else if(a[0]=="1"&&b[0]=="1"){
res.push(flag);
flag="1";
}else{
if(flag=="0"){
res.push("1");
flag="0";
}else{
res.push("0");
flag="1";
}
}
a.shift();
b.shift();
}
c=a.concat(b);
if(flag=="0"){
res=res.concat(c);
}else{
if(c.length){
//将第一个为0的数变为1,前面的数变为0
while(c[0]=="1"){
res.push("0");
c.shift();
}
c.shift();
res.push("1");
res=res.concat(c);
}else{
res.push("1");
}
}
return res.reverse().join("");
};