编写不易,请勿盗用。
本篇博客超链接:https://blog.csdn.net/weixin_50837893/article/details/117350773
1.需求分析
上移动
-- 从上到下 获取列数据,形成一维数组
eg: 2 2 0 0 --》 4 0 0 0
2 2 2 0 --》 4 0 2 0 --》4 2 0 0
2 0 2 0 --》 2 2 0 0 --》4 0 0 0
2 0 2 4 --》 2 2 4 0 --》4 0 4 0 --》4 4 0 0
-- 合并数据
-- 去零: 将0元素移至末尾
-- 相邻相同,则合并(将后一个元素累加到前一个元素上,后一个元素清零)
-- 去零:将0元素移到末尾
-- 将一维数组元素 还原至原列
下移动
-- 从下到上 获取列数据,形成一维数组
-- 合并数据
-- 去零: 将0元素移至末尾
-- 相邻相同,则合并(将前一个元素累加到后一个元素上,后一个元素清零)
-- 去零: 将0元素移至末尾
-- 将一维数组元素 还原至原列
左移动
--从左到右 获取列数据,形成一维数组
--合并数据
-- 去零: 将0元素移至末尾
-- 相邻相同,则合并(将前一个元素累加到后一个元素上,前一个元素清零)
-- 去零: 将0元素移至末尾
-- 将一维数组元素 还原至原列
右移动
--从右到左 获取列数据,形成一维数组
--合并数据
-- 去零: 将0元素移至末尾
-- 相邻相同,则合并(将后一个元素累加到前一个元素上,后一个元素清零)
-- 去零: 将0元素移至末尾
-- 将一维数组元素 还原至原列
2.编 码
1. 定义去零方法(针对一维数组):将0元素移至末尾
2. 合并数据方法(针对一维数组)
-- 去零: 将0元素移至末尾
-- 相邻相同,则合并(将前一个元素累加到后一个元素上,后一个元素清零)
-- 去零: 将0元素移至末尾
3.上移
-- 从上到下 获取列数据,形成一维数组
-- 调用合并数据方法
-- 将一维数组元素 还原至原列
4.下移
-- 从下到上 获取列数据,形成一维数组
-- 调用合并数据方法
-- 将一维数组元素 还原至原列
5. 左移
-- 从左到右 获取列数据,形成一维数组
-- 调用合并数据方法
-- 将一维数组元素 还原至原列
6. 右移
-- 从右到左 获取列数据,形成一维数组
-- 调用合并数据方法
-- 将一维数组元素 还原至原列
由于本篇注重于算法实现,所以用控制台应用实现效果。
/*
去零方法
*/
private static void RemoveZero(int[] array) {
//0 0 0 0
int[] newArray = new int[array.Length];
int index = 0;
// 将非零元素 依次 赋值给新数组
for (int i = 0;i<array.Length;i++) {
if (array[i]!=0) {
newArray[index++] = array[i];
}
}
newArray.CopyTo(array,0);
}
/*
合并方法
*/
private static void Merge(int[] array) {
// eg: 2 2 0 2
// 去零后: 2 2 2 0
RemoveZero(array);
//合并数组
for (int i = 0; i < array.Length - 1; i++)
{
// 相邻相同 两个0相邻时不合并
if (array[i] != 0 && array[i] == array[i + 1])
{
array[i]