1. 程式人生 > 其它 >牛客華為機試HJ17

牛客華為機試HJ17

原題傳送門

1. 問題描述

2. Solution

1、思路
注意條件過濾
2、實現
Java

package huawei.HJ017;

import java.io.IOException;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
    static Scanner in;

    public static void main(String[] args) throws IOException {
        if (!"Linux".equals(System.getProperty("os.name"))) {
            in = new Scanner(Paths.get("/Users/jun/Documents/Learn/JavaLearning/NowCoder/src/huawei/HJ017/input.txt"));
        } else {
            in = new Scanner(System.in);
        }
        while (in.hasNext()) {
            String s = in.nextLine();
            solve(s);
        }
    }

    private static void solve(String s) {
        int x = 0;
        int y = 0;

        for (String word : s.split(";")) {
            if (word.length() == 0 || word.length() > 3)
                continue;
            char direction = word.charAt(0);
            String distance = word.substring(1);
            if ((direction != 'A' && direction != 'S' && direction != 'W' && direction != 'D')
                    || (!isNumber(distance)))
                continue;
            int dis = Integer.parseInt(distance);
            if (direction == 'A')
                x -= dis;
            else if (direction == 'D')
                x += dis;
            else if (direction == 'W')
                y += dis;
            else if (direction == 'S')
                y -= dis;
        }
        System.out.printf("%d,%d", x, y);
    }

    private static boolean isNumber(String s) {
        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
        return pattern.matcher(s).matches();
    }
}

Python

import sys

if sys.platform != "linux":
    file_in = open("input/HJ17.txt")
    sys.stdin = file_in


def solve(s):
    x, y = 0, 0
    for word in s.split(";"):
        if not word or len(word) > 3:
            continue
        direction = word[0]
        distance = word[1:]
        if not distance.isdigit() or len(distance) > 2:
            continue
        distance = int(distance)
        if direction == 'A':
            x -= distance
        elif direction == 'D':
            x += distance
        elif direction == 'W':
            y += distance
        elif direction == 'S':
            y -= distance
    print(f'{x},{y}')


for line in sys.stdin:
    solve(line.strip())

3、複雜度分析
時間複雜度: O(n)
空間複雜度: O(1)