栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[2022刷题打卡 2/365]390. 消除游戏

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[2022刷题打卡 2/365]390. 消除游戏

先是题目: 390. 消除游戏

给定一个从1 到 n 排序的整数列表。
首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾。
第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直到列表开头。
我们不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。
返回长度为 n 的列表中,最后剩下的数字。

 

很遗憾, 这道数学题我不会......

就当作时复习go了

今天的解法参考大佬的动态规划-》dfs不记忆化

Java Version

   class Solution {
        public int lastRemaining(int n) {
            return dfs(n);
        }

        private int dfs(int n) {
            if (n == 1) {
                return 1;
            }
            if (n == 2) {
                return 2;
            }
            if (n % 2 != 0) {
                return dfs(n - 1);
            } else {
                return 2 + n - 2 * dfs(n / 2);
            }

        }
    }

Go Version

package January

func lastRemaining(n int) int {
	return dfs(n)
}

func dfs(n int) int {
	if n == 1 {
		return 1
	}
	if n == 2 {
		return 2
	}
	if n%2 != 0 {
		return dfs(n - 1)
	} else {
		return 2 + n - 2*dfs(n/2)
	}
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号