Java实现通用组合算法

来源:java认证发布时间:2012-11-12 13:12:40java认证视频

  // 将遇到10后,左侧的1全部移动到最左侧

  int count = Math.min(zeroCount, oneCount);

  int startIndex = this.occupyIndexList.get(0);

  int endIndex = 0;

  if(pos>1 && count>0) {

  pos--;

  endIndex = this.occupyIndexList.get(pos);

  for (int i=0; i

  this.startBitSet.set(startIndex, true);

  this.startBitSet.set(endIndex, false);

  startIndex = this.occupyIndexList.get(i+1);

  pos--;

  if(pos>0) {

  endIndex = this.occupyIndexList.get(pos);

  }

  }

  }

  // 将遇到1的位置用*替换

  for (int i=0; i

  if (this.startBitSet.get(this.occupyIndexList.get(i))) {

  charArrayClone[this.occupyIndexList.get(i)] = '*';

  }

  }

  this.container.add(new String(charArrayClone));

  }

  }

  }

  }

  测试用例如下所示:

  package org.shirdrn;

  import java.util.ArrayList;

  import java.util.Collection;

  import junit.framework.TestCase;

  import org.shirdrn.util.GoodTools;

  public class TestCommonSplitter extends TestCase {

  private CommonSplitter splitter;

  public void setSplitter(Collection container, int starCount, boolean duplicate) {

  this.splitter = new CommonSplitter(container, starCount, duplicate);

  }

  public void testSplliter() {

  Collection container = new ArrayList();

  container.add("1*10**");

  int starCount = 2;

  boolean duplicate = true;

  this.setSplitter(container, starCount, duplicate);

  System.out.println(this.splitter.getFilteredContainer());

  }

  public void testSplliter3() {

  Collection container = new ArrayList();

  container.add("1*10*1300*");

  int starCount = 3;

  boolean duplicate = true;

  this.setSplitter(container, starCount, duplicate);

  System.out.println(this.splitter.getFilteredContainer());

  assertEquals(35, this.splitter.getFilteredContainer().size());

  }

  public void testNoStar() {

  Collection container = new ArrayList();

  container.add("3110330");

  int starCount = 3;

  boolean duplicate = true;

  this.setSplitter(container, starCount, duplicate);

  System.out.println(this.splitter.getFilteredContainer());

  assertEquals(35, this.splitter.getFilteredContainer().size());

  }

  public void testSplitter_8_310() {

  // 8 场:310

  String multiSeq = "310,310,310,310,310,310,310,310";

  Collection container = GoodTools.getNSingleList(multiSeq);

  assertEquals(6561, container.size());

  int starCount = 4;

  boolean duplicate = false;

  this.setSplitter(container, starCount, duplicate);

  assertEquals(459270, this.splitter.getFilteredContainer().size());

  }

  }

  上述测试耗时大约2s左右。

  上述算法实现主要是针对两种条件进行实现的,即:

  第一个是完全数字字符串 ——> 带有*号的组合数字字符串;

  第二个带有*号的组合数字字符串 ——> 在该基础上继续组合得到带有*号的组合数字字符串。

  如果使用上述算法实现处理第一个条件,由于使用了列表List来记录索引,使执行速度略微低一点,比之于前面实现的不使用List列表来处理。

上一页123下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答