面试算法 -03

/**
	 *  题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,
	 *  打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
	 */
	public void method1(){
		String[] arr = new String[]{"1","2","3","4","5"};
		System.out.println(33);
		for(int i=122345;i<543221;i++){
			boolean flg = true;
			for(int k=0;k<arr.length;k++){
				if((""+i).indexOf(arr[k]) ==-1){
					flg =  false;
				}
			}
			if((""+i).indexOf(2+"") == (""+i).lastIndexOf(2+"")){
				flg = false;
			}
			if((""+i).indexOf(35+"") !=-1 || (""+i).indexOf(53+"") !=-1){
				flg = false;
			}
			if((i+"").charAt(2) == '4'){
				flg = false;
			}
			
			if(flg)
			System.out.println(i);
		}
	}
	
	/**
	 * 	兔子生兔子问题。 
		 简单描述: f3=f1+f2; 
		 例子: 1,1,2,3,5,8,13...... 
	 */
	public int produceRabbit(int i){
		if(i ==1 || i==2){
			return 1;
		}
		return produceRabbit(i-2)+produceRabbit(i-1);
	}
	
	/**
	 *
	 *要求前提是不允许使用util包以及之外的类,即任何集合类都不允许使用。
	 * 写出的算法效率越高,此题得分越高,大家可以试一下。题目是输入一串已经排序好的数组,
	 * 输出消除重复数之后的数组。
	 * 例如: 输入{ 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 };输出{ 1, 2, 3, 4, 5 };
	 */
	public void removeRup(){
		int[] arr = new int[]{1,2,2,2,3,3,3,4,4,4,5,5,5};
		StringBuffer sb = new StringBuffer();
		sb.append("");
		for(int i=0;i<arr.length;i++){
			if(sb.toString().indexOf(arr[i]+"") ==-1){
				sb.append(arr[i]+"");
			}
		}
		
		int[] newarr = new int[sb.toString().length()];
		for(int k=0;k<sb.toString().length();k++){
			newarr[k] = sb.toString().charAt(k);
		}
		System.out.println(newarr+"--"+sb.toString());
	}
	
	public void removeRup2(){
		int[] arr = new int[]{1,2,2,2,3,3,3,4,4,4,5,5,5};
		Set<Integer> set = new HashSet<Integer>();
		for(int k=0;k<arr.length;k++){
			set.add(arr[k]);
		}
		StringBuffer sb = new StringBuffer();
		Integer[] aras = set.toArray(new Integer[0]);
		
		for(int i=0;i<aras.length;i++){
			sb.append(aras[i]);
		}
		System.out.println(sb.toString());
	}
	
	

点赞