笔试题之交错数组 Java递归求解

题目: 将一个交错数据合并为一个一维数组
输入: strJaggedArray[][], 由多个一维数组(长度不定,个数不定)组成的交错数组
输出: strArray[], 由strJaggedArray[r][c]中的元素以"&"为分隔符拼合而成, 是strJaggedArray中数组元素的无重复组合(不考虑顺序)

举例:
输入: strJaggedArray[0]=new string[] {"we","are","student"};
      strJaggedArray[1]=new string[] {"say","what"};
输出: strArray[]={"we&say","we&what","are&say","are&what","student&say","student&what"}

输入: strJaggedArray[0]=new string[] {"cs","app"};
      strJaggedArray[1]=new string[] {"good","cool","dev"};
      strJaggedArray[2]=new string[] {"king","of","the","world"};
输出: strArray[]={"cs&good&king","cs&good&of","cs&good&the","cs&good&world","cs&cool&king","cs&cool&of","cs&cool&the","cs&cool&world",...}

 

好久没玩玩TopCoder了,工作时间不允许,看到这样的题目多多少少有种熟悉的感觉....,如果现在再打TopCoder的话,因该比去年进步了很多了吧........

本来是C#的题,不过最近学JAVA又没书看,只好找题做了...

 


public   class  ExchangeArray  {

    
/**
     * @Auth Red_angelX
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        String[][] strJaggedArray = new String[3][];
        strJaggedArray[
0= new String[] {"cs","app"};
        strJaggedArray[
1= new String[] {"good","cool","dev"};
        strJaggedArray[
2= new String[] {"king","of","the","world"};
        String[] strArray 
= Exchange(strJaggedArray);
        
for(int i=0; i< strArray.length ;i++)
        
{
        System.out.println(strArray[i]);
        }

    }

    
    
/**
     * 函数
     * 
@param strJaggedArray
     * 
@return
     
*/

    
public static String[] Exchange(String[][] strJaggedArray)
    
{
        String[][] temp 
= DoExchange(strJaggedArray);
        
return temp[0];        
    }

    
    
/**
     * 递归
     * 
@param strJaggedArray
     * 
@return
     
*/

    
private static String[][] DoExchange(String[][] strJaggedArray)
    
{
        
int len = strJaggedArray.length;
        
if(len >= 2)
        
{            
            
int len1 = strJaggedArray[0].length;
            
int len2 = strJaggedArray[1].length;
            
int newlen = len1*len2;
            String[] temp 
= new String[newlen];
            
int Index = 0;
            
for(int i=0;i<len1;i++)
            
{
                
for(int j=0;j<len2;j++)
                
{
                    temp[Index] 
= strJaggedArray[0][i] + "&"+strJaggedArray[1][j];
                    Index 
++;
                }

            }

            String[][] newArray 
= new String[len-1][];
            
for(int i=2;i<len;i++)
            
{
                newArray[i
-1= strJaggedArray[i];                            
            }

            newArray[
0= temp;
            
return DoExchange(newArray);
        }

        
else
        
{
        
return strJaggedArray;    
        }

    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值