carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode1496:判断路径是否相交(path-crossing) #236

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

给你一个字符串 path,其中 path[i] 的值可以是 'N'、'S'、'E' 或者 'W',分别表示向北、向南、向东、向西移动一个单位。

你从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。

如果路径在任何位置上与自身相交,也就是走到之前已经走过的位置,请返回 true ;否则,返回 false 。

示例 1:

输入:path = "NES" 输出:false 解释:该路径没有在任何位置相交。

示例 2:

输入:path = "NESWW" 输出:true 解释:该路径经过原点两次。  

提示:

1 <= path.length <= 104 path[i] 为 'N'、'S'、'E' 或 'W'

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/path-crossing

carloscn commented 1 year ago

问题分析

使用元组来表示->x,y, 根据上下左右来操作元组的值,操作下来之后和start相等,那么就返回true

pub fn is_path_crossing(path: String) -> bool
{
    if path.len() < 1 {
        return false;
    }

    let mut point:(i32, i32) = (0,0);
    let path_vec:Vec<char> = path.chars().collect();

    for e in path_vec {
        if e == 'N' || e == 'n' {
            point.1 += 1;
        } else if e == 'S' || e == 's' {
            point.1 -= 1;
        } else if e == 'W' || e == 'w' {
            point.0 -= 1;
        } else if e == 'E' || e == 'e' {
            point.0 += 1;
        } else {
            return false;
        }

        if (0, 0) == point  {
            return true;
        }
    }

    return false;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/554726 https://github.com/carloscn/structstudy/commit/1ea661ba5487d96c821ebade4053a29789c49ef7