題目
DNA 鏈缺少配對(duì)的堿基。依據(jù)每一個(gè)堿基,為其找到配對(duì)的堿基,將結(jié)果作為第二個(gè)數(shù)組返回通贞。
Base pairs(堿基對(duì)) 是一對(duì) AT 和 CG朗若,為給定的字母匹配缺失的堿基。
在每一個(gè)數(shù)組中將給定的字母作為第一個(gè)堿基返回滑频。
例如捡偏,對(duì)于輸入的 GCG,相應(yīng)地返回 [["G", "C"], ["C","G"],["G", "C"]]
字母和與之配對(duì)的字母在一個(gè)數(shù)組內(nèi)峡迷,然后所有數(shù)組再被組織起來封裝進(jìn)一個(gè)數(shù)組银伟。
如果你被卡住了,記得開大招 Read-Search-Ask绘搞。嘗試與他人結(jié)伴編程彤避、編寫你自己的代碼。
這是一些對(duì)你有幫助的資源:
Array.push()
String.split()
function pair(str) {
return str;
}
pair("GCG");
思路
- 第一遍沒看懂夯辖,按照以往的經(jīng)驗(yàn)琉预,興沖沖的打開 Base pairs(堿基對(duì)) 的超鏈接,應(yīng)該會(huì)有很詳細(xì)的對(duì)這個(gè)游戲的解釋蒿褂;可惜圆米,他大爺?shù)模蜷_的是全英文的維基啄栓,還是沒看懂娄帖;
- 所以說,內(nèi)事問百度是有道理的昙楚,在百度百科找到了這個(gè)的解釋:
堿基對(duì)
形成DNA近速、RNA單體以及編碼遺傳信息的化學(xué)結(jié)構(gòu)。組成堿基對(duì)的堿基包括A—腺嘌呤堪旧、G—鳥嘌呤削葱、T—胸腺嘧啶、C—胞嘧啶淳梦、U—尿嘧啶析砸。嚴(yán)格地說,堿基對(duì)是一對(duì)相互匹配的堿基(即A—T爆袍, G—C首繁,A—U相互作用)被氫鍵連接起來。然而螃宙,它常被用來衡量DNA和RNA的長(zhǎng)度(盡管RNA是單鏈)。它還與核苷酸互換使用所坯,盡管后者是由一個(gè)五碳糖谆扎、磷酸和一個(gè)堿基組成。
- 扯這么多芹助,意思就是一共有3組原始組合:[A,T],[G,C],[A,U]
- 而題目只提到了
Base pairs(堿基對(duì)) 是一對(duì) AT 和 CG堂湖,為給定的字母匹配缺失的堿基闲先。
- 因此只有2對(duì) AT、CG无蜂,也就是說當(dāng)str 里有字符為A時(shí)伺糠,要返回[A,T]斥季,有字符為T時(shí)训桶,要返回[T,A]酣倾,CG組合同理舵揭;
- 這個(gè)理解了,題目就很簡(jiǎn)單了躁锡,用到一個(gè)函數(shù) charAt() 來遍歷str的字符午绳;然后寫個(gè)case或者 4個(gè)if else可以解決問題;
解答
function pair(str) {
var val=[]; // 定義變量接收數(shù)組
for (var i=0;i<=str.length;i++){
if(str.charAt(i) === 'A'){
val[i] = ['A','T']; // 變量的第 i 個(gè)位置寫入 數(shù)組映之;
} 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");
搜索了一下網(wǎng)上的做法拦焚,千變?nèi)f化,有用到題目所提示的 split()杠输、push() 方法的赎败;比如下面這個(gè),做法很巧妙抬伺,取得str的對(duì)應(yīng)字符存放到新數(shù)組newStr螟够,最后將新數(shù)組依照 i 的位置順序 做合并,代碼簡(jiǎn)潔峡钓、高效:
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;
}