文章

49

粉丝

90

获赞

9

访问

25.4k

头像
2048游戏 题解:C++
P1472
发布于2024年3月8日 17:52
阅读数 721

1.一个位置只能合并一次,所以我设置了一个flag判断该位置是否合并过

2222  ->  0044

2. 0代表这里没数字,不是代表这里有一个0

0202  ->  0004

关键之处我已注释!

#include<deque>
#include<iostream>
using namespace std;

class my_deque
{
public:
	deque<int>d;//双端队列
	/*
		if(队列为空 && 该处有数字)
			{插入该数字;}
		else if(队列不空 && 该处有数字)
		{
			if(队尾数字==n && 这个位置没有合并过)
			{
				弹出队尾;
				插入2n;
				这个位置合并过;
			}
			else
			{
				插入n;
				这个位置没合并过;
			}
	*/
	void my_push(int n)
	{
		int flag = 0;
		if (d.empty() && n != 0)
		{
			d.push_back(n);
		}
		else if (!d.empty() && n != 0)
		{
			if (d.back() == n && flag == 0)
			{
				d.pop_back();
				d.push_back(2 * n);
				flag = 1;
			}
			else
			{
				d.push_back(n);
				flag = 0;
			}
		}
	}
	/*
		if(队列非空)
		{
			记录并弹出队头;
		}
		else
		{
			弹出0;
		}
	*/
	int my_pop()
	{
		if (!d.empty())
		{
			int x = d.front();
			d.pop_front();
			return x...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发