javascript - 在 JQuery 中重用 PHP 代码并通过引用传递问题的排列

标签 javascript jquery

原始代码:

// function to generate and print all N! permutations of $str. (N = strlen($str)).
function permute($str,$i,$n) {
   if ($i == $n)
       print "$str\n";
   else {
        for ($j = $i; $j < $n; $j++) {
          swap($str,$i,$j);
          permute($str, $i+1, $n);
          swap($str,$i,$j); // backtrack.
       }
   }
}

// function to swap the char at pos $i and $j of $str.
function swap(&$str,$i,$j) {
    $temp = $str[$i];
    $str[$i] = $str[$j];
    $str[$j] = $temp;
}   

$str = "hey";
permute($str,0,strlen($str)); // call the function.

我想重用此代码并为我的 jquery 进行排列,所以这是我的代码:

div id="wrapper">
    <input type="text" id="word">
</div>
<div id="combinations">
    <p>

    </p>
</div>

<script>
    function permute(str,i,n) {
           if (i == n)
                $('p').append(str+" ");
           else {
                for (j = i; j < n; j++) {
                  swap(str,i,j);
                  permute(str, i+1, n);
                  swap(str,i,j); // backtrack.
               }
           }
        }

        // function to swap the char at pos $i and $j of $str.
    function swap(str,i,j) {
        var temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }   

    $('#word').on('input',function(e){
        var str = $("#word").val();
        if(str == ''){
            $('p').empty();
        }
        if(str.length != strOld){
            $('p').empty();
        }
        var strOld = str.length;

        permute(str, 0,str.length)


    });
</script>

因此,在该段落中,我想显示用户输入的所有排列,因此如果用户输入 AB,它将显示 AB BA 等等,我不太确定如何将 &$str 从原始的更改为 JQuery我读过一些关于在 JS/JQuery 中通过引用传递的其他堆栈问题,但我无法真正理解它。

现在,此代码不会产生任何错误,它只是显示用户输入的输入字段的精确副本。

更新:我根据您的建议尝试过的操作:

function permute(str,i,n) {
           if (i == n)
                $('p').append(str+" ");
           else {
                for (j = i; j < n; j++) {
                  str = swap(str,i,j);
                  permute(str, i+1, n);
                  str = swap(str,i,j); // backtrack.
               }
           }
        }

    function swap(str,i,j) {
        str = str.split("");
        var temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        return str.join("");
    }   


        var str = "hey";
        permute(str, 0,str.length)

它只显示了嘿,没有其他内容

最佳答案

这是 PHP 代码的 JS 版本:

function permute( str, i, n ) {
   if ( i == n ){
      console.log(str);     
   } else {
        for ( var j = i; j < n; j++) {
          str = swap( str, i, j );
          permute( str, i+1, n );
          str = swap( str, i, j ); // backtrack.
       }
   }
}

// function to swap the char at pos $i and $j of $str.
function swap( str, i, j ) {
    str = str.split("");
    var temp = str[i];
    str[i] = str[j];
    str[j] = temp;
    return str.join("");
}   

var str = "hey";
permute( str, 0, str.length ); // call the function.

这是JSFiddle

关于javascript - 在 JQuery 中重用 PHP 代码并通过引用传递问题的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34539013/

相关文章:

jquery - 过滤数据AngularJS后显示消息空结果

javascript - 每滚动 1 像素添加 1 像素的填充(底部)——jQuery 或 Javascript

c# - asp.net 文本 onkeyup 事件

javascript - XSS 在现代浏览器中仍然存在

javascript - 通过一个 onclick 函数隐藏多个 div

javascript - 使用 coffeescript 运行我的 node.js 应用程序时 module.exports 不缓存

javascript - 脚本在 div tabbertab 中未正确显示

javascript - 使用 jquery 时下拉 selectedindex 不触发

javascript - 使用 Bootstrap 的 Metro 磁贴布局?

javascript - 使用 Razor 和 JS 单击行时获取列数据