`

编程算法基础_常用思路_4_一刀切法

 
阅读更多
 

 

 

 

 

 

前言:

1) 操作场景是编程中的边沿处理

2) 思想: 把不同的地方经过处理变成逻辑上相同的, 长和if结合使用

3) 分类有两种:
上式:预先补齐,使得没有边沿的区别。
下式:事后修正,先放任结果中的边沿瑕疵,最后修理它

 

 

案例:

 

package day1;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class cutflush {

	/**
	 * 一刀切
	 */
	public static void main(String[] args) {
		
		pyramid4();

	}
	
	
	// 做法1   虾米级
	public static void pyramid1(){
		List list = new ArrayList();
		String testStr = "abc ttt,kmd,uuu xyz";
		String[] subs0 = testStr.split(" ");
		for(int i=0; i<subs0.length; i++){
			String subs1 = subs0[i];
			String[] subs10 = subs1.split(",");
			for(int j=0; j<subs10.length; j++){
				list.add(subs10[j]);
			}
		}
		String[] arrys = (String[]) list.toArray(new String[list.size()]);
		//Arrays.toString(arrys)
		System.out.println(Arrays.toString(arrys));
	}
		
	/**
	 * 一刀切之上式:预先补齐
	 * 0 用逗号或空格分隔的串,提取出各个部分
	 * 1  观察发现除了xyz外每个字符串后都跟着一个特殊字符,或者空格
	 * 2 将最后的字符串xyz后面也跟上,或者空格,保证处理所有字符串特征一致(--->这就是预先补齐表达的含义)
	 */
	public static void pyramid2(){
		String testStr = "abc ttt,kmd,uuu xyz";
		String tempStr = "";
		testStr += ",";
		for(int i=0; i<testStr.length(); i++){
			char tempChar = testStr.charAt(i) ;
			if(tempChar == ' ' || tempChar == ','){
				System.out.println(tempStr);
				tempStr = "";
			}else{
				tempStr += testStr.charAt(i) ;
			}
		}
	}
	
	/**
	 * 一刀切之下式:事后修正法 ---> 先放任结果中的边沿瑕疵,最后修理它
	 * 0  将字符串用,分隔并输出
	 */
	public static void pyramid3(){
		String testStr = "abcttt";
		StringBuilder sb = new StringBuilder();
		for(int i=0; i<testStr.length(); i++){
			char tempChar = testStr.charAt(i);
			sb.append(",").append(tempChar);
		}
		String result = sb.substring(1, sb.length());
		System.out.println(result);
	}
	
	/**
	 * 一刀切之上式:通话时间案例
	 * 某个用户的开始通话时间为: 12:38:15
	      结束通话时间为: 12:39:16
               则该用户通话时长为:62秒
              对于一般的情况,可能需要考虑:跨分钟,跨小时,跨零点的问题。
	 */
	public static void pyramid4(){
		String s1 = "23:59:9";
	    String s2 = "00:59:8";
	    int hour;
	    if (Integer.valueOf(mySplit(s2).get(0)) < Integer.valueOf(mySplit(s1).get(0))) {
	          hour = 24 + Integer.valueOf(mySplit(s2).get(0)) - Integer.valueOf(mySplit(s1).get(0));// 跨零点时+24
	    } else {
	          hour = Integer.valueOf(mySplit(s2).get(0)) - Integer.valueOf(mySplit(s1).get(0));
	    }
	    int min = Integer.valueOf(mySplit(s2).get(1))  - Integer.valueOf(mySplit(s1).get(1));
	    int sec = Integer.valueOf(mySplit(s2).get(2))  - Integer.valueOf(mySplit(s1).get(2)) + 1;
	    
	    System.out.println("hour: " + hour + " min: " + min + " second: " + sec);
	    int time = hour * 60 * 60 + min * 60 + sec;
	    System.out.println("通话时间长度为:"+time+"s");
	    
	    String ans = "";
	    
	     if(hour>0){
	        if(min > 0){
	        	if(sec > 0){
	        		 ans=hour+"小时"+min+"分"+sec+"秒";
	        	}else{
	        		min = min -1;
	        		sec = sec + 60;
	        		ans=hour+"小时"+min+"分"+sec+"秒";
	        	}
	        }else{
	        	hour = hour - 1;
	        	min = min + 60;
	        	if(sec > 0){
	        		 ans=hour+"小时"+min+"分"+sec+"秒";
	        	}else{
	        		min = min -1;
	        		sec = sec + 60;
	        		ans=hour+"小时"+min+"分"+sec+"秒";
	        	}
	        }
	     }
	     System.out.println(ans);
	}
	
	public static List<String> mySplit(String s) {
	     List<String> list = new ArrayList<String>();//建立List存放时间
	     String t = "";//临时字符串
	     s += ":";//一刀切上式
	 
	     for (int i = 0; i < s.length(); i++) {
	        char c = s.charAt(i);
	        if (c == ':') {
	          list.add(t);//加入到list
	          t = "";
	        } else {
	          t += c;
	        }
	     }
	     return list;
	  }

}

  

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics