"查看并说出序列"在javascript中

时间:2015-07-04 16:39:49

标签: javascript arrays

  

1
  11个
  12个
  1121
  122111个
  112213个
  122211个
  ....   
  我试图解决这个问题。它是这样的。   我需要检查前一行并写下:重复的次数和次数。   
前。 1 - > 1(编号)1(时间)

var antsArr = [[1]];
var n = 10;

for (var row = 1; row < n; row++) { 
  var lastCheckedNumber = 0;
  var count = 1;
  antsArr[row] = [];

  for (var col = 0; col < antsArr[row-1].length; col++) {

    if (lastCheckedNumber == 0) {   
        lastCheckedNumber = 1;
        antsArr[row].push(lastCheckedNumber);

    } else {

        if (antsArr[row-1][col] == lastCheckedNumber) {
            count++;

        } else {
            lastCheckedNumber = antsArr[row-1][col];
        }

    }

  }
  antsArr[row].push(count);
  antsArr[row].push(lastCheckedNumber);
}



for (var i = 0; i < antsArr.length; i++) {
  console.log(antsArr[i]);
}

我从2天前就开始这样做了。 我自己很难解决这个问题。我知道这对你们来说是非常基本的代码。 但是,如果有一个真正热心的人帮助我,我会很高兴!产品:&gt;

3 个答案:

答案 0 :(得分:2)

我不确定这是否正确,因为我之前不知道这个序列。请检查并告诉我它是否有效。

var hh=0;
function ls(j,j1)
{
     var l1=j.length;
     var fer=j.split('');
     var str='';
     var counter=1;
     for(var t=0;t<fer.length;t++)
     { 
         if(fer[t]==fer[t+1])
            {
                   counter++;            
            }
            else
            {
                   str=str+""+""+fer[t]+counter;
                     counter=1;
            }    
    }
    console.log(str);
    while(hh<5)   //REPLACE THE NUMBER HERE TO CHANGE NUMBER OF COUNTS!
    {
         hh++;
         //console.log(hh);
         ls(str);
    }
}

ls("1");

enter image description here

答案 1 :(得分:1)

试试这个:

JSFiddle Sample

function lookAndSay(seq){
    var prev = seq[0];
    var freq = 0;
    var output = [];
    seq.forEach(function(s){
        if (s==prev){
            freq++;
        }
        else{
            output.push(prev);
            output.push(freq);
            prev = s;
            freq = 1;
        }
    });
    output.push(prev);
    output.push(freq);
    console.log(output);
    return output;
}

// Sample: try on the first 11 sequences
var seq = [1];
for (var n=0; n<11; n++){
    seq = lookAndSay(seq);
}

快速解释

输入序列是一个包含序列中所有数字的简单数组。该函数遍历序列中的元素,计算当前出现的数字的频率。当遇到新数字时,它会将先前出现的数字和频率一起推送到输出。

继续迭代直到它结束,确保将最后出现的数字和频率添加到输出中,就是这样。

答案 2 :(得分:1)

你可以check out the working solution for in this fiddle here

您可以通过将逻辑拆分为不同的模块来解决此问题 所以主要是你有2个任务 -

  1. 对于给定的数字序列(比如[1,1,2]),您需要找到频率分布 - 类似于 - [1,2,2,1]这是主要逻辑。
  2. 继续生成新的分发列表,直到给定的数字(比如n)。
  3. 将它们分成两个不同的功能并独立测试
    对于任务1,代码看起来像这样 -

     /*
     This takes an input [1,1,2] and return is freq - [1,2,2,1]
     */
     function find_num_freq(arr){
        var freq_list = [];
        var val = arr[0];
        var freq = 1;
        for(i=1; i<arr.length; i++){
            var curr_val = arr[i];
            if(curr_val === val){
                freq += 1;
            }else{
                //Add the values to the freq_list
                freq_list.push([val, freq]);
                val = curr_val;
                freq = 1;
            }
        }
        freq_list.push([val, freq]);
    
        return freq_list;
    }
    

    对于任务2,它不断为每行结果调用上述函数。 它的代码看起来像这样 -

    function look_n_say(n){
        //Starting number
        var seed = 1;
        var antsArr = [[seed]];
    
        for(var i = 0; i < n; i++){
            var content = antsArr[i];
            var freq_list = find_num_freq(content);
            //freq_list give an array of [[ele, freq],[ele,freq]...]
            //Flatten so that it's of the form - [ele,freq,ele,freq]
            var freq_list_flat = flatten_list(freq_list);
            antsArr.push(freq_list_flat);
        }
        return antsArr;
    }
    
    /**
    This is used for flattening a list.
    Eg - [[1],[1,1],[1,2]] => [1,1,1,1,2]
    basically removes only first level nesting
    **/
    function flatten_list(li){
        var flat_li = [];
        li.forEach(
            function(val){
                for(ind in val){
                    flat_li.push(val[ind]);
                }
            }
        );
        return flat_li;
    }
    

    前10个n值的输出 -

    OUTPUT
    n = 1:
    [[1],[1,1]]
    
    
    n = 2:
    [[1],[1,1],[1,2]]
    
    
    n = 3:
    [[1],[1,1],[1,2],[1,1,2,1]]
    
    
    n = 4:
    [[1],[1,1],[1,2],[1,1,2,1],[1,2,2,1,1,1]]
    
    
    n = 5:
    [[1],[1,1],[1,2],[1,1,2,1],[1,2,2,1,1,1],[1,1,2,2,1,3]]
    
    
    n = 6:
    [[1],[1,1],[1,2],[1,1,2,1],[1,2,2,1,1,1],[1,1,2,2,1,3],[1,2,2,2,1,1,3,1]]
    
    
    n = 7:
    [[1],[1,1],[1,2],[1,1,2,1],[1,2,2,1,1,1],[1,1,2,2,1,3],[1,2,2,2,1,1,3,1],[1,1,2,3,1,2,3,1,1,1]]
    
    
    n = 8:
    [[1],[1,1],[1,2],[1,1,2,1],[1,2,2,1,1,1],[1,1,2,2,1,3],[1,2,2,2,1,1,3,1],[1,1,2,3,1,2,3,1,1,1],[1,2,2,1,3,1,1,1,2,1,3,1,1,3]]
    
    
    n = 9:
    [[1],[1,1],[1,2],[1,1,2,1],[1,2,2,1,1,1],[1,1,2,2,1,3],[1,2,2,2,1,1,3,1],[1,1,2,3,1,2,3,1,1,1],[1,2,2,1,3,1,1,1,2,1,3,1,1,3],[1,1,2,2,1,1,3,1,1,3,2,1,1,1,3,1,1,2,3,1]]