C++ LeetCode1812判斷國際象棋棋盤格子顏色
1812.判斷國際象棋棋盤中一個格子的顏色
力扣題目鏈接:leetcode.cn/problems/de…
給你一個坐標(biāo) coordinates
,它是一個字符串,表示國際象棋棋盤中一個格子的坐標(biāo)。下圖是國際象棋棋盤示意圖。
如果所給格子的顏色是白色,請你返回 true
,如果是黑色,請返回 false
。
給定坐標(biāo)一定代表國際象棋棋盤上一個存在的格子。坐標(biāo)第一個字符是字母,第二個字符是數(shù)字。
示例 1:
輸入:coordinates = "a1"
輸出:false
解釋:如上圖棋盤所示,"a1" 坐標(biāo)的格子是黑色的,所以返回 false 。
示例 2:
輸入:coordinates = "h3"
輸出:true
解釋:如上圖棋盤所示,"h3" 坐標(biāo)的格子是白色的,所以返回 true 。
示例 3:
輸入:coordinates = "c7"
輸出:false
提示:
coordinates.length == 2
'a' <= coordinates[0] <= 'h'
'1' <= coordinates[1] <= '8'
方法一:取模
其實不難發(fā)現(xiàn),a1
、a3
、a5
是黑色,a2
、a4
是白色,b2
是黑色
我們把a ~ h
映射為0 ~ 7
,把1 ~ 8
也映射為0 ~ 7
,此時我們就能發(fā)現(xiàn),當(dāng)字母映射成的數(shù)字和數(shù)字映射成的數(shù)字的奇偶性相同時,格子為黑色。
因此,我們只需要判斷字母 - 'a'
和數(shù)字 - '1'
的奇偶性是否相同,若不同則為白色,返回true
- 時間復(fù)雜度O(1)
- 空間復(fù)雜度O(1)
AC代碼
C++
class Solution { public: bool squareIsWhite(string coordinates) { return (coordinates[0] - 'a') % 2 != (coordinates[1] - '1') % 2; } };
方法二:基于方法一的小改進
方法一中我們令字母減'a'
令數(shù)字減'1'
,然后判斷二者奇偶性是否相同。
方法二中我們對此做一個小小的優(yōu)化:
a
的ASCII碼是97
,1
的ASCII碼是49
,二者本來奇偶性就相同。
因此,在方法二中,我們可以“字母不減'a'
”了,“數(shù)字也不減'1'
”了,直接判斷字母和數(shù)字的奇偶性是否相同即可
- 時間復(fù)雜度O(1)
- 空間復(fù)雜度O(1)
AC代碼
C++
class Solution { public: bool squareIsWhite(string coordinates) { return coordinates[0] % 2 != coordinates[1] % 2; } };
方法二相比于方法一少了兩次減法運算。
以上就是C++ LeetCode1812判斷國際象棋棋盤格子顏色的詳細(xì)內(nèi)容,更多關(guān)于C++ 判斷棋盤格子顏色的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語言中的一維數(shù)組與二維數(shù)組的實現(xiàn)
數(shù)組可以幫我們巧妙解決生活中的問題,使我們的代碼簡潔,本文主要介紹了C語言中的一維數(shù)組與二維數(shù)組,具有一定的參考價值,感興趣的可以了解一下2023-12-12C++ Boost PropertyTree解析INI文件詳解
Boost PropertyTree庫不僅可以解析JSON,XML格式,還可以直接解析INI格式文件。這篇文章就是為大家介紹一下如何通過Boost PropertyTree解析INI文件,需要的可以參考一下2022-01-01C++用一棵紅黑樹同時封裝出set與map的實現(xiàn)代碼
set中存儲的一般為鍵K即可,而map存儲的一般都是鍵值對KV,也就是說他們結(jié)構(gòu)是不同的,那么我們?nèi)绾尾拍苡靡活w紅黑樹同時封裝出set與map兩種容器呢,那么接下來我們具體地來研究下STL庫中是怎樣實現(xiàn)的,并且進行模擬實現(xiàn),需要的朋友可以參考下2024-03-03