重新打印String数组Java

时间:2016-07-18 19:45:05

标签: java arrays permutation

我有一个字符串数组

 "Ben", "Jim", "Ken"

如何打印上面的数组3次,如下所示:

 "Ben", "Jim", "Ken"
 "Jim", "Ben", "Ken"
 "Ken", "Jim", "Ben"

我只是希望初始数组中的每个项目都显示为第一个元素。其他项目出现的顺序无关紧要。

更多例子

输入

"a","b","c","d"

输出

"a","b","c","d"
"b","a","c","d"
"c","b","a","d"
"d","a","c","d"

方法签名

 public void printArray(String[] s){
 }

4 个答案:

答案 0 :(得分:2)

我没有给你直接的代码,而是试图解释这个问题的理论/数学。

我能解决这个问题的两个最简单的方法是

  • 循环浏览所有元素
  • 选择一个元素并列出其余部分

第一种方法需要您遍历索引,然后迭代遍历数组中的所有元素,并在必要时循环回到开头,当您返回原始元素时终止。

第二种方法需要你遍历索引,打印原始元素,然后从头开始迭代数组,跳过原始元素。

正如您所看到的,这两种方法都需要两个循环(因为您在数组中迭代两次)

在伪代码中,第一种方法可以写成:

for (i = array_start; i < array_end; i++) {
    print array_element[i]
    for (j = i + 1; j != i; j++) {
        if (j is_larger_than array_end) {
            set j equal to array_start
        }
        print array_element[j]
    }
}

在伪代码中,第二种方法可以写成:

for (i = array_start; i < array_end; i++) {
    print array_element[i]
    for (j = array_start; j < array_end; j++) {
        if (j is_not_equal_to i) {
            print array_element[j]
        }
    }
}

答案 1 :(得分:0)

def fizz_buzz(n)
  Array(1..12).map do |n|
    if n % 3 == 0 && n % 5 == 0 
      'fizzbuzz'
    elsif n % 3 == 0 
      'fizz'
    elsif n % 5 == 0 
      'buzz'
    else
      n
    end
  end
end

result = fizz_buzz 12 
# result => [1, 2, "fizz", 4, "buzz", "fizz", 7, 8, "fizz", "buzz", 11, "fizz"]

答案 2 :(得分:0)

    for(int i=0;i<s.length;i++){
        for(int j=i;j<s.length+i;j++) {
            System.out.print(s[j%(s.length)]);
        }
        System.out.println();
    }

使用 mod 适合此问题。第一个示例的打印值索引是这样的;

0 1 2

1 2 0

2 0 1

所以如果你像下面这样写它们并采用数组的长度mod(在这种情况下是3)你将得到解决方案。

0 1 2

1 2 3

2 3 4

答案 3 :(得分:0)

这听起来像是一个家庭作业问题,所以当我觉得我不应该回答它时,我会给出一个简单的提示。您正在寻找一种算法,该算法将给出元素的“for循环索引”的所有排列(组合),而不是元素本身。所以如果你有三个元素a,b,c它们的索引是0,1,2我们需要的是一种生成0,1,2的排列的方法所以这会导致一个常见的数学问题,一个非常简单的数学公式

见这里:https://cbpowell.wordpress.com/2009/11/14/permutations-vs-combinations-how-to-calculate-arrangements/