C++ LeetCode1812判斷國(guó)際象棋棋盤格子顏色
1812.判斷國(guó)際象棋棋盤中一個(gè)格子的顏色
力扣題目鏈接:leetcode.cn/problems/de…
給你一個(gè)坐標(biāo) coordinates
,它是一個(gè)字符串,表示國(guó)際象棋棋盤中一個(gè)格子的坐標(biāo)。下圖是國(guó)際象棋棋盤示意圖。
如果所給格子的顏色是白色,請(qǐng)你返回 true
,如果是黑色,請(qǐng)返回 false
。
給定坐標(biāo)一定代表國(guó)際象棋棋盤上一個(gè)存在的格子。坐標(biāo)第一個(gè)字符是字母,第二個(gè)字符是數(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'
方法一:取模
其實(shí)不難發(fā)現(xiàn),a1
、a3
、a5
是黑色,a2
、a4
是白色,b2
是黑色
我們把a ~ h
映射為0 ~ 7
,把1 ~ 8
也映射為0 ~ 7
,此時(shí)我們就能發(fā)現(xiàn),當(dāng)字母映射成的數(shù)字和數(shù)字映射成的數(shù)字的奇偶性相同時(shí),格子為黑色。
因此,我們只需要判斷字母 - 'a'
和數(shù)字 - '1'
的奇偶性是否相同,若不同則為白色,返回true
- 時(shí)間復(fù)雜度O(1)
- 空間復(fù)雜度O(1)
AC代碼
C++
class Solution { public: bool squareIsWhite(string coordinates) { return (coordinates[0] - 'a') % 2 != (coordinates[1] - '1') % 2; } };
方法二:基于方法一的小改進(jìn)
方法一中我們令字母減'a'
令數(shù)字減'1'
,然后判斷二者奇偶性是否相同。
方法二中我們對(duì)此做一個(gè)小小的優(yōu)化:
a
的ASCII碼是97
,1
的ASCII碼是49
,二者本來(lái)奇偶性就相同。
因此,在方法二中,我們可以“字母不減'a'
”了,“數(shù)字也不減'1'
”了,直接判斷字母和數(shù)字的奇偶性是否相同即可
- 時(shí)間復(fù)雜度O(1)
- 空間復(fù)雜度O(1)
AC代碼
C++
class Solution { public: bool squareIsWhite(string coordinates) { return coordinates[0] % 2 != coordinates[1] % 2; } };
方法二相比于方法一少了兩次減法運(yùn)算。
以上就是C++ LeetCode1812判斷國(guó)際象棋棋盤格子顏色的詳細(xì)內(nèi)容,更多關(guān)于C++ 判斷棋盤格子顏色的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- C/C++哈希表優(yōu)化LeetCode題解997找到小鎮(zhèn)的法官
- C/C++實(shí)現(xiàn)獲取系統(tǒng)時(shí)間的示例代碼
- C++ LeetCode1805字符串不同整數(shù)數(shù)目
- C++ LeetCode1775通過(guò)最少操作次數(shù)使數(shù)組和相等
- C++ LeetCode1780判斷數(shù)字是否可以表示成三的冪的和
- C++ LeetCode300最長(zhǎng)遞增子序列
- C++?LeetCode1827題解最少操作使數(shù)組遞增
- C/C++題解LeetCode1295統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字
相關(guān)文章
C語(yǔ)言中的一維數(shù)組與二維數(shù)組的實(shí)現(xiàn)
數(shù)組可以幫我們巧妙解決生活中的問(wèn)題,使我們的代碼簡(jiǎn)潔,本文主要介紹了C語(yǔ)言中的一維數(shù)組與二維數(shù)組,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12C++中vector的實(shí)現(xiàn)方法示例詳解
這篇文章主要介紹了C++中vector實(shí)現(xiàn)的相關(guān)資料,vector是C++中重要的容器之一,底層通過(guò)三個(gè)迭代器實(shí)現(xiàn),分別是_start,?_finish,?和_end_of_storage,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10C++ Boost PropertyTree解析INI文件詳解
Boost PropertyTree庫(kù)不僅可以解析JSON,XML格式,還可以直接解析INI格式文件。這篇文章就是為大家介紹一下如何通過(guò)Boost PropertyTree解析INI文件,需要的可以參考一下2022-01-01詳解用C語(yǔ)言實(shí)現(xiàn)三子棋游戲流程
三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。將正方形對(duì)角線連起來(lái),相對(duì)兩邊依次擺上三個(gè)雙方棋子,只要將自己的三個(gè)棋子走成一條線,對(duì)方就算輸了2021-11-11淺談C++中對(duì)象的復(fù)制與對(duì)象之間的相互賦值
這篇文章主要介紹了淺談C++中對(duì)象的復(fù)制與對(duì)象之間的相互賦值,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09C++用一棵紅黑樹同時(shí)封裝出set與map的實(shí)現(xiàn)代碼
set中存儲(chǔ)的一般為鍵K即可,而map存儲(chǔ)的一般都是鍵值對(duì)KV,也就是說(shuō)他們結(jié)構(gòu)是不同的,那么我們?nèi)绾尾拍苡靡活w紅黑樹同時(shí)封裝出set與map兩種容器呢,那么接下來(lái)我們具體地來(lái)研究下STL庫(kù)中是怎樣實(shí)現(xiàn)的,并且進(jìn)行模擬實(shí)現(xiàn),需要的朋友可以參考下2024-03-03