当前位置: 首页 > news >正文

leecode第18天

3274.检查棋盘方格颜色是否相同
# 给你两个字符串 coordinate1 和 coordinate2,代表 8 x 8 国际象棋棋盘上的两个方格的坐标。

# 以下是棋盘的参考图。
class Solution:
    """
    该类用于检查两个棋盘格子的颜色是否相同
    """
    
    def checkTwoChessboards(self, coordinate1, coordinate2):
        """
        检查两个棋盘格子的颜色是否相同
        
        :param coordinate1: 第一个棋盘格子的坐标,例如 "A1"
        :param coordinate2: 第二个棋盘格子的坐标,例如 "C3"
        :return: 如果两个棋盘格子的颜色相同返回True,否则返回False
        """
        # 将坐标转换为列表,以便分别处理字母和数字部分
        lst1 = list(coordinate1)
        lst2 = list(coordinate2)
        
        # 将字母部分转换为数字,A对应1,B对应2,以此类推
        char2num1 = ord(lst1[0]) - 97 + 1
        char2num2 = ord(lst2[0]) - 97 + 1
        
        # 判断两个格子的颜色是否相同,通过计算字母和数字的和的奇偶性来确定颜色
        if (int(lst1[1]) + char2num1) % 2 == (int(lst2[1]) + char2num2) % 2:
            return True
        else:
            return False

问题分析与优化建议

潜在问题
  1. 输入验证缺失
    • 当前代码没有对输入的合法性进行验证。如果 coordinate1coordinate2 格式不正确(例如,长度不符合、字母部分超出范围、数字部分非法等),可能会导致运行时错误。
    • 示例:如果输入 "a""a1B",代码会抛出异常。
  2. 边界条件处理不足
    • 假设棋盘大小为标准的 8x8(a-h, 1-8),但代码未限制字母和数字的范围。如果输入超出范围(如 "i1""a9"),可能会返回错误结果。
  3. 异常处理缺失
    • 如果输入包含非字母或非数字字符(如 "a@""1b "),代码会抛出异常。
  4. 代码可读性问题
    • 使用 list() 将字符串拆分为列表后逐个处理字母和数字部分,虽然可以工作,但不够直观。直接通过索引访问字符串的字符会更简洁。
可优化方向
  1. 性能优化

    • 当前代码逻辑已经足够高效,无需进一步提升性能。
  2. 代码可维护性

    • 添加输入验证逻辑,确保输入格式合法。
    • 简化代码结构,避免不必要的变量声明,提高代码可读性。
    • 提供清晰的错误提示信息,便于调试。
    class Solution(object):
        """
        该类用于检查两个棋盘格子的颜色是否相同
        """
        
        def checkTwoChessboards(self, coordinate1, coordinate2):
            """
            检查两个棋盘格子的颜色是否相同
            
            :param coordinate1: 第一个棋盘格子的坐标,例如 "a1"
            :param coordinate2: 第二个棋盘格子的坐标,例如 "c3"
            :return: 如果两个棋盘格子的颜色相同返回True,否则返回False
            """
            def validate_coordinate(coordinate):
                """验证坐标格式是否合法"""
                if len(coordinate) != 2:
                    raise ValueError(f"坐标 {coordinate} 格式不正确,应为 '字母+数字' 的形式")
                letter, number = coordinate[0], coordinate[1]
                if not letter.isalpha() or not number.isdigit():
                    raise ValueError(f"坐标 {coordinate} 包含非法字符")
                if not ('a' <= letter.lower() <= 'h') or not (1 <= int(number) <= 8):
                    raise ValueError(f"坐标 {coordinate} 超出棋盘范围 (a-h, 1-8)")
    
            # 验证输入坐标
            validate_coordinate(coordinate1)
            validate_coordinate(coordinate2)
    
            # 将字母部分转换为数字,a对应1,b对应2,以此类推
            char2num1 = ord(coordinate1[0].lower()) - ord('a') + 1
            char2num2 = ord(coordinate2[0].lower()) - ord('a') + 1
    
            # 判断两个格子的颜色是否相同,通过计算字母和数字的和的奇偶性来确定颜色
            return (int(coordinate1[1]) + char2num1) % 2 == (int(coordinate2[1]) + char2num2) % 2
    
http://www.dtcms.com/a/109244.html

相关文章:

  • 代码拟有感
  • 跟我学C++中级篇——In-Place Construction 和placement new
  • React-router v7 第二章(路由模式)
  • Vant 上传图片闪动问题的原因与解决方案
  • Shell脚本编程之大括号扩展
  • Spring 核心技术解析【纯干货版】- XX:Spring 测试模块 Spring-Test 模块精讲
  • 【文献研究】铝对热冲压加热过程中锌氧化的影响
  • 【C++ SIMD】第3篇:数据对齐与跨步访问(Windows/VS2022版)——以AVX为例
  • Hadoop集群---运维管理和技巧
  • 【Kafka基础】单机安装与配置指南,从零搭建环境
  • NodeJS--NPM介绍使用
  • 训练或微调以生成新组合结构
  • Leetcode 927 -- 思维
  • Win10定时任务计划无法显示要执行的EXE任务程序界面,问题解决办法
  • 什么是检索增强生成(RAG)
  • 7-3 逆序的三位数
  • PyTorch 深度学习实战(33):联邦学习与隐私保护
  • CROSS JOIN第一个表中的每一行与第二个表中的每一行组合
  • 商城系统:电商时代的核心驱动力
  • Cribl 修改字段rename
  • Express学习笔记(四)——同源和跨域详解
  • (九)图形管线
  • Vue3.5 企业级管理系统实战(十三):TagsView标签栏导航
  • PyQt6实例_A股日数据维护工具_权息数据增量更新线程
  • 禹神:三小时快速上手TypeScript,TS速通教程(上篇、中篇、下篇,装饰器),根据视频整理
  • Windows查重工具,强烈推荐大家收藏!
  • 前端接收客户端返回的token值使用pinia持久化保存token
  • 元素定位-xpath
  • verl单机多卡与多机多卡使用经验总结
  • MCP的基本组成部分有哪些?MCP Servers服务器起到什么作用?