全排列

    /**
   * 全排列递归实现
   */
  private List<String> quanpailie(char[] cs, int current) {
    //结果
    List<String> result = new LinkedList<>();
    //当前指向数组最后一位时,将数组(全排列的一种)输出到结果集里
    if (current == cs.length - 1) {
      result.add(Arrays.toString(cs));
    } else {
      //循环改变数组的第一个位置的值,并求剩下的其他字符的全排列,并装入结果集.
      for (int i = current; i < cs.length; i++) {
        //交换当前字符与下一字符
        swap(cs, current, i);
        //这一块难理解,相当于,在A确定放在第一位的时候,求BC的全排列,并且加上A,形成ABC,ACB放入结果集.
        result.addAll(quanpailie(cs, current + 1));
        //交换回来,方便下一次交换.
        swap(cs, current, i);
      }
    }
    return result;
  }

  /**
   * 交换数组第b,e位置上的值
   */
  private void swap(char[] cs, int b, int e) {
    char tmp = cs[b];
    cs[b] = cs[e];
    cs[e] = tmp;
  }
全部评论

相关推荐

vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务