不重复的排列C#

时间:2015-12-02 17:44:58

标签: c#

我是C#的初学者,我正在寻找一个代码来返回集合的所有可能的排列,例如{1,1,2},而不重复:{112,121,211}。我找到了以下链接,但我不知道如何使用它。

http://www.codeproject.com/Articles/26050/Permutations-Combinations-and-Variations-using-C-G

我尝试过的代码如下。当我试图获得" 111"的排列时例如,它返回所有可能的重复排列,即六个111。但我正在寻找提供排列而不重复的东西。更详细地说,111只是一个排列而不是六个。

public class Main2Activity extends AppCompatActivity {

    private final static String APP_TITLE = AppContext.cntx.getResources().getString(R.string.app_name);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main2);
        Button b = (Button) findViewById(R.id.button);
        b.setText(APP_TITLE);
    }
}

2 个答案:

答案 0 :(得分:0)

由于您尚未发布任何代码,因此只能猜测。但是,如果你拆开问题陈述,那么听起来好像你只有一个问题,那就是重新输入你的输入。这是一个需要解决的微不足道的问题。这是一种方法:

string dedupe = new string(input.ToCharArray().Distinct().ToArray()); 

字符串重复数据删除现在只包含原始字符串输入中的唯一字符。

答案 1 :(得分:0)

我终于找到了我正在寻找的代码。

public static void permute(int [] ps,int start,int n) {

//doSomething(ps);
int tmp = 0;
if (start < n) {
  for (int i = n - 2; i >= start; i--) {
    for (int j = i + 1; j < n; j++) {
      if (ps[i] != ps[j]) {
        // swap ps[i] <--> ps[j]
        tmp = ps[i];
        ps[i] = ps[j];
        ps[j] = tmp;

        permute(ps, i + 1, n);
      }
    }

    // Undo all modifications done by
    // recursive calls and swapping
    tmp = ps[i];
    for (int k = i; k < n - 1;)
      ps[k] = ps[++k];
    ps[n - 1] = tmp;
  }
}

}