【LeetCode】数学(共106题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica }

【2】Add Two Numbers

【7】Reverse Integer

【8】String to Integer (atoi)

【9】Palindrome Number

【12】Integer to Roman

【13】Roman to Integer

【29】Divide Two Integers

【43】Multiply Strings

【50】Pow(x, n)

【60】Permutation Sequence

【65】Valid Number

【66】Plus One

【67】Add Binary

【69】Sqrt(x)

【149】Max Points on a Line

【166】Fraction to Recurring Decimal

【168】Excel Sheet Column Title

【171】Excel Sheet Column Number

【172】Factorial Trailing Zeroes

【202】Happy Number

【204】Count Primes

【223】Rectangle Area

【224】Basic Calculator

【231】Power of Two

【233】Number of Digit One

【246】Strobogrammatic Number

【247】Strobogrammatic Number II

【248】Strobogrammatic Number III

【258】Add Digits

【263】Ugly Number

【264】Ugly Number II

【268】Missing Number

【273】Integer to English Words

【279】Perfect Squares

【296】Best Meeting Point

【313】Super Ugly Number

【319】Bulb Switcher

【326】Power of Three

【335】Self Crossing

【343】Integer Break

【356】Line Reflection

【357】Count Numbers with Unique Digits

【360】Sort Transformed Array

【365】Water and Jug Problem

【367】Valid Perfect Square

【368】Largest Divisible Subset

【372】Super Pow

【396】Rotate Function

【397】Integer Replacement

【400】Nth Digit

【413】Arithmetic Slices

【415】Add Strings

【423】Reconstruct Original Digits from English

【441】Arranging Coins

【453】Minimum Moves to Equal Array Elements

【462】Minimum Moves to Equal Array Elements II

【469】Convex Polygon

【478】Generate Random Point in a Circle

【483】Smallest Good Base

【507】Perfect Number

【517】Super Washing Machines

【523】Continuous Subarray Sum

【535】Encode and Decode TinyURL

【537】Complex Number Multiplication

【553】Optimal Division

【573】Squirrel Simulation

【592】Fraction Addition and Subtraction

【593】Valid Square

【598】Range Addition II

【625】Minimum Factorization

【628】Maximum Product of Three Numbers

【633】Sum of Square Numbers

【634】Find the Derangement of An Array

【640】Solve the Equation

【645】Set Mismatch

【651】4 Keys Keyboard

【660】Remove 9

【670】Maximum Swap

【672】Bulb Switcher II

【728】Self Dividing Numbers

【753】Cracking the Safe

【754】Reach a Number

【775】Global and Local Inversions

【780】Reaching Points

【781】Rabbits in Forest

【782】Transform to Chessboard

【789】Escape The Ghosts

【794】Valid Tic-Tac-Toe State  (Oct 15th, 2018 每日一题)

通过字符串数组给定一个Tic-Tac-Toe(三连棋游戏,两人轮流在九格方盘上画‘X‘或者‘O‘,谁先把三个相同记号排成横线、直线、斜线,即是胜者)状态board。 返回True如果当且仅当这个状态是一个有效的状态。 board是3x3数组,包含字符" ", "X", "O"。" "字符代表空的格。

Tic-Tac-Toe游戏规则:

    1. 玩家只能轮流在空格(" ")里面画字符。
    2. 第一个玩家总是画"X",第二个玩家总是画"O"。
    3. "X"和"O"只能画在空白的格里面,不能画在已经存在"O"和"X"的格里。
    4. 三个相同记号排成横线、直线、斜线,即游戏结束。
    5. 如果没有空的格,游戏也结束。
    6. 游戏结束不能再移动。
Example 1:
Input: board = ["O  ", "   ", "   "]
Output: false
Explanation: The first player always plays "X".

Example 2:
Input: board = ["XOX", " X ", "   "]
Output: false
Explanation: Players take turns making moves.

Example 3:
Input: board = ["XXX", "   ", "OOO"]
Output: false

Example 4:
Input: board = ["XOX", "O O", "XOX"]
Output: true

题解:参考知乎:https://zhuanlan.zhihu.com/p/34216982

首先我们要先熟悉下Tic-Tac-Toe三连棋游戏规则,就是两人轮流在九格方盘上画‘X‘或者‘O‘,谁先把三个相同记号排成横线、直线、斜线,即游戏结束。 
那么我们从游戏规则中来找处所有不合理的状态。 
根据规则1和2,假设X的数目为countX, O的数目为countO,那么我们可以得到countX==countO,或者countX - countO == 1。 
根据游戏结束后则不能再画O和X,那么当countX==count时,如果存在三个X排成横线、直线、斜线,那么即是不合理的,因为X先画,当三个X排成横线、直线、斜线时, 此时游戏结束,不能再画O,所以O的数目应该比X的数目少1。 
当countX - countO == 1时,如果存在三个O排成横线、直线、斜线,那么是不合理的,因为当三个O排成横线、直线、斜线时,游戏结束,不能再画X,所以此时X的数目应该和O的数目相等。

 1 class Solution {
 2 public:
 3     bool validTicTacToe(vector<string>& board) {
 4         int cntX = 0, cntO = 0;
 5
 6         //1. X的个数要么和O个数相同,要么X个数比O的个数多一个
 7         for (int i = 0; i < 3; ++i) {
 8             for (int j = 0; j < 3; ++j) {
 9                 board[i][j] == ‘X‘ ? cntX++ : board[i][j] == ‘O‘ ? cntO++ : 1;
10             }
11         }
12         if (cntX != cntO && cntX != cntO+1) {
13             return false;
14         }
15
16         //2. 判断最后一个放棋的是X,还是O
17         if (cntX - cntO == 1) {
18             //X最后放的棋子,所以每行,每列,每个对角线O不能有三连。
19             if(check(board, ‘O‘) == false) {
20                 return false;
21             }
22         } else if (cntX == cntO) {
23             //O最后放的棋子,所以每行,每列,每个对角线X不能有三连。
24             if(check(board, ‘X‘) == false) {
25                 return false;
26             }
27         }
28         return true;
29     }
30     bool check(vector<string>& board, char c) {
31         for (int i = 0; i < 3; ++i) {
32             string target = string(3, c);
33             if (board[i] == target) { return false;} // rows
34             if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] == c) {  return false; } // cols
35         }
36         if (board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[0][0] == c) { return false; }
37         if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] == c) { return false; }
38         return true;
39     }
40 };

【800】Similar RGB Color

【805】Split Array With Same Average

【810】Chalkboard XOR Game

【812】Largest Triangle Area

【829】Consecutive Numbers Sum

【836】Rectangle Overlap

【858】Mirror Reflection

【866】Prime Palindrome

【868】Binary Gap

【869】Reordered Power of 2

【877】Stone Game

【878】Nth Magical Number

【883】Projection Area of 3D Shapes

【885】Spiral Matrix III

【887】Super Egg Drop

【891】Sum of Subsequence Widths

【892】Surface Area of 3D Shapes

【899】Orderly Queue

原文地址:https://www.cnblogs.com/zhangwanying/p/9790007.html

时间: 2024-08-03 08:14:19

【LeetCode】数学(共106题)的相关文章

【sql】leetcode习题 (共 42 题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [175]Combine Two Tables [176]Second Highest Salary [177]Nth Highest Salary [178]Rank Scores [180]Consecutive Numbers [181]Employees Earning More Than Their Managers [182]Duplicate Email

[LeetCode] 数学计算模拟类问题:除法和幂,注意越界问题。题 Pow(x, n) ,Divide Two Integers

引言 数学计算的模拟类题目,往往是要求实现某种计算(比如两数相除),实现的过程中会有所限定,比如不允许乘法等等. 这类题目首先要注意计算过程中本身的特殊情况.比如求相除,则必须首先反映过来除数不能为0. 其次要记得考虑负数的情况,如果计算范围不单单是整数,还要考虑double的比较方式. 最后要注意越界情况,这个是最容易犯错的,只能具体问题具体分析. 例题 1 Pow(x, n) Implement pow(x, n). class Solution { public: double pow(d

hdu 5621 KK&#39;s Point(数学,推理题)

题解: 在圆上点三个点时,除圆上三个交点外,圆内没有交点:在圆上点四个点时,除圆上四个交点外,圆内出现了一个交点,因此,在N个点中每四个点便可以在圆内产生一个交点,因此N个点在圆内形成的点的个数为CN4,总的交点数就是CN4+N 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<iostream> 3 #include<cstdio> 4 #include<cstrin

LeetCode面试常见100题( TOP 100 Liked Questions)

LeetCode面试常见100题( TOP 100 Liked Questions) 置顶 2018年07月16日 11:25:22 lanyu_01 阅读数 9704更多 分类专栏: 面试编程题真题合集 常见算法问题 LeetCode试题 LeetCode常见试题 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lanyu_01/article/details/81062232 这篇文章

Leetcode动态规划【简单题】

目录 Leetcode动态规划[简单题] 53. 最大子序和 题目描述 思路分析 复杂度分析 70.爬楼梯 题目描述 思路分析 复杂度分析 121.买卖股票的最佳时机 题目描述 思路分析 复杂度分析 303.区域和检索-数组不可变 题目描述 思路分析 复杂度分析 Leetcode动态规划[简单题] 动态规划(Dynamic programming,简称DP),是一种把原问题分解为相对简单的子问题的方式求解复杂问题的方法.动态规划相较于递归,拥有更少的计算量. 53. 最大子序和 题目描述 给定一

【LeetCode】树(共94题)

[94]Binary Tree Inorder Traversal [95]Unique Binary Search Trees II (2018年11月14日,算法群) 给了一个 n,返回结点是 1 - n 的所有形态的BST. 题解:枚举每个根节点 r, 然后递归的生成左右子树的所有集合,然后做笛卡尔积. 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *

【LeetCode】动态规划(下篇共39题)

[600] Non-negative Integers without Consecutive Ones [629] K Inverse Pairs Array [638] Shopping Offers [639] Decode Ways II [646] Maximum Length of Pair Chain [647] Palindromic Substrings [650] 2 Keys Keyboard [651] 4 Keys Keyboard [656] Coin Path [6

【LeetCode】BFS(共43题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [101]Symmetric Tree 判断一棵树是不是对称. 题解:直接递归判断了,感觉和bfs没有什么强联系,当然如果你一定要用queue改写的话,勉强也能算bfs. // 这个题目的重点是 比较对象是 左子树的左儿子和右子树的右儿子, 左子树的右儿子和右子树的左儿子.不要搞错. // 直接中序遍历的话会有错的情况,最蠢的情况是数字标注改一改.. 1 /** 2

【LeetCode】贪心 greedy(共38题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [44]Wildcard Matching [45]Jump Game II (2018年11月28日,算法群衍生题) 题目背景和 55 一样的,问我能到达最后一个index的话,最少走几步. 题解: [55]Jump Game (2018年11月27日,算法群) 给了一个数组nums,nums[i] = k 代表站在第 i 个位置的情况下, 我最多能往前走 k 个单