Skip to content

Instantly share code, notes, and snippets.

@jikeytang
Last active August 29, 2015 14:02
Show Gist options
  • Select an option

  • Save jikeytang/23466a3462f57ce3c434 to your computer and use it in GitHub Desktop.

Select an option

Save jikeytang/23466a3462f57ce3c434 to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140618-题目1
如何把一个字符串,用特定的符号有序的连接,列出所有连接可能。
如:'ab' -> a-b,
'abc' -> a-bc, a-b-c, ab-c,
'abcd' -> a-bcd, ab-cd, abc-d,a-b-cd, ab-c-d,a-bc-d,a-b-c-d
PS:
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。
```javascript
// you code
```
2. 粘贴代码时请使用shift+tab,缩进前面的空白。
@gaojunle

Copy link
Copy Markdown
    //思路分析:字符串的字符间是加“-"的位置,位置数为posLen=str.length-1; 
    //添加字符的所有情况是2的posLen次幂,将这些位置转成所有二进制形式(前置有0),
    //如:0001表示有5个字符,4个位置,最后一个位置上加"-",依次处理所有情况,得到所有结果
    var str = 'abcde';
    function opStr(str) {
        var len = str.length,
                binary = allBinary(len - 1),//所有二进制形式
                bLen = binary.length;
        var strArr = str.split('');

        var tempArr = [];
        for (var j = 0; j < bLen; j++) {    //对所有二进制形式
            tempArr[j] = [];
            for (var i = 0; i < len; i++) { //字符串,的处理
                tempArr[j].push(strArr[i])  //先把第一个字符加入,然后判断第一个字符后的位置是0、1,如果是1,加上"-"
                //由于字符串长度,比位置多1,因此加上i < len - 1;判断
                if(i < len - 1 && binary[j][i] == 1) {
                    tempArr[j].push('-');
                }
            }
            tempArr[j] = tempArr[j].join('');
        }
        return tempArr;
    }
    function allBinary(len) {
        var all = [], pow = Math.pow(2, len);
        for (var i = 1; i < pow; i++) {
            var parBinary = parseInt(i, 10).toString(2),
                    pLen = parBinary.length;

            var res = (pLen < len) ? Array(len - pLen + 1).join('0') + parBinary : parBinary;
            all.push(res);
        }
        return all;
    }
    var res = opStr(str);
    console.log(res)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment