很久很久以前,在穿越狂野西部一片沙漠的途中,…
你迷路了,有人给你指引到达目的地的方向。 方向为["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]。 显然"NORTH"和"SOUTH"是相反的方向,"EAST“和"WEST"也是。 朝一个方向前进,然后按反方向前进等于回到原地。 由于这是狂野的西部,天气恶劣,严重缺水,你要节省自己的体力,否则你可能会渴死!
如何才能根据指引聪明的穿越沙漠?
那人给出的方向指示是:例如:
["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
你可以明显看出往"NORTH",然后往"SOUTH"肯定不合理,最好原地不动!所以你的任务是简化指引,识破真正的方向。在这种情况下,简化后明智的方向是:
["WEST"]
怎么一回事?
举个栗子:
在 ["NORTH", "SOUTH", "EAST", "WEST"]中,方向"NORTH"+"SOUTH"相反,原地不动,方向移除。路径变为[“EAST”,“WEST”],现在“EAST”和“WEST”彼此抵消,因此最终结果为[ ]。
在["NORTH", "EAST", "WEST", "SOUTH", "WEST", "WEST"]中,"NORTH"和"SOUTH"之间并没有直接相反,但在消除"EAST"和"WEST"之后,"NORTH"和"SOUTH"就变的直接相反了,所以整个路径可以减少到[“WEST”,“WEST”]。
不可简化的栗子:
[“NORTH”,“WEST”,“SOUTH”,“EAST”]不可简化,因为相邻的两个字符串不是相反方向。
任务
写一个函数dirReduc(),它将使用一个字符串数组,将相邻的两个相反方向移除并返回一个字符串数组。
示例:
dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]) => ["WEST"]
dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH"]) => []
这个问题的思路应该是相关方向的两个值是相反数,例如NORTH=-1,SOUTH=1,EAST=-1i(虚数),WEST=1i,而你要做的是比较两个数相加是否等于0,如果等于0,则取出这两个数,之后是比较四个数相加是否等于0,以此类推,只要最后所有的数都判断返回的数组就是最终数组
先将数组中的"NORTH", "SOUTH", "EAST", "WEST"个数统计出来,然后定义NORTH = 1,SOUTH = -1,这2个相加,就可以知道如果结果大于0,就是往NORTH ,东西方向也是一样的。
1.将数组转为string
2.String s1 = "SOUTH,NORTH";String s2 = "NORTH,SOUTH";String s3 = "EAST,WEST";String s4 = "WEST,EAST";
3.private String judge(String s){
String s1 = "SOUTH,NORTH";
String s2 = "NORTH,SOUTH";
String s3 = "EAST,WEST";
String s4 = "WEST,EAST";
if(s.contains(s1)){
s = s.replace(s1,"");
judge(s);
}else if(s.contains(s2)){
s = s.replace(s2,"");
judge(s);
}else if(s.contains(s3)){
s = s.replace(s3,"");
judge(s);
}else if(s.contains(s4)){
s = s.replace(s4,"");
judge(s);
}
return s;
}
public void direct(){
String[] dir = {"NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"};
int n = 0, s = 0, e = 0, w = 0;
for(int i = 0; i < dir.length; i++){
switch(dir[i]){
case "NORTH":
n++;
break;
case "SOUTH":
s++;
break;
case "EAST":
e++;
break;
case "WEST":
w++;
break;
}
}
//接着计算n-s,e-w。这个应该会吧
}