V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Newyorkcity
V2EX  ›  问与答

请问这种题目怎么 dp 啊?

  •  
  •   Newyorkcity · 2020-04-21 15:06:08 +08:00 · 427 次点击
    这是一个创建于 1969 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://leetcode-cn.com/problems/freedom-trail/

    别的不说,就比如在前往 key[i] 时,逆时针和顺时针波动以到达的一个最近位置的花费是一样的,dp 如何表达这件事?

    dfs 用过了,超时。。。

    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    
    public class Solution {
    
        private String rring;
        private String kkey;
        private Map<Character, Set<Integer>> ringMap;
        private int ans = Integer.MAX_VALUE;
    
        public int findRotateSteps(String ring, String key) {
            rring = ring;
            kkey = key;
            ringMap = new HashMap<>();
            for (int i = 0; i < ring.length(); i++) {
                char c = ring.charAt(i);
                Set<Integer> set = ringMap.getOrDefault(c, new HashSet<Integer>());
                set.add(i);
                ringMap.put(c, set);
            }
            dfs(0, 0, 0);
            return ans;
        }
    
        public void dfs(int keyIdx, int nowIdx, int stepCounter) {
            if (keyIdx == kkey.length()) {
                ans = Math.min(ans, stepCounter);
                return;
            }
            Character ch = kkey.charAt(keyIdx);
            for (Integer nextIdx : ringMap.get(ch)) {
                dfs(keyIdx + 1, nextIdx, stepCounter + 1 + distanceCounter(nowIdx,
                        nextIdx));
            }
    
        }
    
        public int distanceCounter(int nowIdx, int nextIdx) {
            int a = Math.abs(nextIdx - nowIdx);
            int b = rring.length() - a;
            return Math.min(a, b);
        }
    }
    

    谢谢

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   984 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.