全排列

    /**
   * 全排列递归实现
   */
  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;
  }
全部评论

相关推荐

友友们,我实在是不太明白,校招的话现在大多也是提前实习,然后转正也是需要考核的,考核通过才能转正,那这跟实习转正有什么区别啊
苦闷的仰泳鲈鱼刷了1...:提前实习,是让你提前熟悉业务的,后续是入职后可以减少试用期的(大部分是包入职的);转正实习,要是hc不够或者其他原因,让你正式offer可能都没有,这个风险很大。 ---个人看法和了解到的。
点赞 评论 收藏
分享
八极星:有什么不能问的,(/_\),这又不是多珍贵的机会,你有什么可失去的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务