题目
DNA 链缺少配对的碱基。依据每一个碱基,为其找到配对的碱基,将结果作为第二个数组返回。
Base pairs(碱基对) 是一对 AT 和 CG,为给定的字母匹配缺失的碱基。
在每一个数组中将给定的字母作为第一个碱基返回。
例如,对于输入的 GCG,相应地返回 [["G", "C"], ["C","G"],["G", "C"]]
字母和与之配对的字母在一个数组内,然后所有数组再被组织起来封装进一个数组。
如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。
这是一些对你有帮助的资源:
Array.push()
String.split()
function pair(str) {
return str;
}
pair("GCG");
思路
- 第一遍没看懂,按照以往的经验,兴冲冲的打开 Base pairs(碱基对) 的超链接,应该会有很详细的对这个游戏的解释;可惜,他大爷的,打开的是全英文的维基,还是没看懂;
- 所以说,内事问百度是有道理的,在百度百科找到了这个的解释:
碱基对
形成DNA、RNA单体以及编码遗传信息的化学结构。组成碱基对的碱基包括A—腺嘌呤、G—鸟嘌呤、T—胸腺嘧啶、C—胞嘧啶、U—尿嘧啶。严格地说,碱基对是一对相互匹配的碱基(即A—T, G—C,A—U相互作用)被氢键连接起来。然而,它常被用来衡量DNA和RNA的长度(尽管RNA是单链)。它还与核苷酸互换使用,尽管后者是由一个五碳糖、磷酸和一个碱基组成。
- 扯这么多,意思就是一共有3组原始组合:[A,T],[G,C],[A,U]
- 而题目只提到了
Base pairs(碱基对) 是一对 AT 和 CG,为给定的字母匹配缺失的碱基。
- 因此只有2对 AT、CG,也就是说当str 里有字符为A时,要返回[A,T],有字符为T时,要返回[T,A],CG组合同理;
- 这个理解了,题目就很简单了,用到一个函数 charAt() 来遍历str的字符;然后写个case或者 4个if else可以解决问题;
解答
function pair(str) {
var val=[]; // 定义变量接收数组
for (var i=0;i<=str.length;i++){
if(str.charAt(i) === 'A'){
val[i] = ['A','T']; // 变量的第 i 个位置写入 数组;
} else if (str.charAt(i) === 'T'){
val[i] = ['T','A'];
} else if (str.charAt(i) === 'G'){
val[i] = ['G','C'];
} else if (str.charAt(i) === 'C'){
val[i] = ['C','G'];
}
}
return val;
}
pair("GCG");
搜索了一下网上的做法,千变万化,有用到题目所提示的 split()、push() 方法的;比如下面这个,做法很巧妙,取得str的对应字符存放到新数组newStr,最后将新数组依照 i 的位置顺序 做合并,代码简洁、高效:
function pair(str) {
var i=0;
var newStr='';
var arr=[];
for(i=0;i<str.length;i++){
switch(str[i]){
case 'A':
newStr+='T';
break;
case 'T':
newStr+='A';
break;
case 'G':
newStr+='C';
break;
case 'C':
newStr+='G';
break;
}
arr.push([str[i],newStr[i]]);
}
return arr;
}