题意整理。
- 开发一个坐标计算工具,按输入的字符串进行对应的坐标移动。
- 合法的输入字符串为:A(或者D或者W或者S)+数字(两位以内)。若输入不合法,直接丢弃。
方法一(模拟)
1.解题思路
- 首先通过分号将输入的字符串分割成字符串数组。
- 然后处理字符串数组的每一个字符串,如果长度不是2或3,表示不合法,直接跳过。
- 接着计算偏移量,遍历每个字符串除第一个字符外的所有字符,通过公式计算到偏移量。如果某个字符不在'0'-'9'范围内,将偏移量置为0,终止循环。
- 最后根据计算得到的偏移量,将坐标移动到对应的位置。
图解展示:
2.代码实现
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//标准输入
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
//输入的一行字符串
String s=sc.nextLine();
//通过";"分割成字符串数组
String[] strarr=s.split(";");
//横坐标
int X=0;
//纵坐标
int Y=0;
for(int i=0;i<strarr.length;i++){
String str=strarr[i];
int len=str.length();
//如果长度不是2或者3,表示不合法,直接跳过
if(len<=1||len>3){
continue;
}
//记录偏移量
int move=0;
for(int j=1;j<len;j++){
//计算偏移量
if(str.charAt(j)>='0'&&str.charAt(j)<='9'){
move=move*10+str.charAt(j)-'0';
}
//如果不是字符'0'-'9',表示输入不合法
else{
move=0;
break;
}
}
//记录坐标移动方向
char c=str.charAt(0);
if(c=='A'){
//向左移动move个单位
X-=move;
}
else if(c=='S'){
//向下移动move个单位
Y-=move;
}
else if(c=='D'){
//向右移动move个单位
X+=move;
}
else if(c=='W'){
//向上移动move个单位
Y+=move;
}
}
System.out.println(X+","+Y);
}
}
}
3.复杂度分析
- 时间复杂度:假设输入的字符串长度为n,最坏情况下,除了一个长度为1的字符串,所有字符串都为空,分割之后的字符串总共有n-1个,所以时间复杂度为。
- 空间复杂度:最坏情况下,需要额外大小为的字符串数组,所以空间复杂度为。
方法二(try、catch处理异常)
1.解题思路
思路和方法一基本一致,只是在处理偏移量的时候,通过try、catch来捕获异常,一旦发现输入不合法,直接跳过即可。
2.代码实现
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//标准输入
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
//输入的一行字符串
String s=sc.nextLine();
//通过分号进行分割
String[] strarr=s.split(";");
//横坐标和纵坐标
int X=0;
int Y=0;
for(int i=0;i<strarr.length;i++){
String str=strarr[i];
int len=str.length();
//如果长度不合法,直接跳过
if(len<=1||len>3){
continue;
}
//通过try、catch捕获异常
try{
char c=str.charAt(0);
//记录偏移量
int move=Integer.parseInt(str.substring(1,len));
if(c=='A'){
//向左移动move个单位
X-=move;
}
else if(c=='S'){
//向下移动move个单位
Y-=move;
}
else if(c=='D'){
//向右移动move个单位
X+=move;
}
else if(c=='W'){
//向上移动move个单位
Y+=move;
}
}
catch(Exception e){
continue;
}
}
System.out.println(X+","+Y);
}
}
}
3.复杂度分析
- 时间复杂度:假设输入的字符串长度为n,最坏情况下,除了一个长度为1的字符串,所有字符串都为空,分割之后的字符串总共有n-1个,所以时间复杂度为。
- 空间复杂度:最坏情况下,需要额外大小为的字符串数组,所以空间复杂度为。