zoukankan      html  css  js  c++  java
  • 30-Day Leetcoding Challenge Day14

    本题提供两种解法:

    第一种:用left 和 right 分别统计向左或向右移动的步数。关键在于要对字符串长度求余数

    第二种:把移动看作是一个环状,只需要用left记录即可,向左移动left加,向右移动left-right。

    Math.floorMod与%的区别

    floorMod(4, 3) == 1;   and (4 % 3) == 1
    floorMod(+4, -3) == -2;   and (+4 % -3) == +1
    floorMod(-4, +3) == +2;   and (-4 % +3) == -1
    floorMod(-4, -3) == -1;   and (-4 % -3) == -1

    JAVA

    class Solution {
        public String stringShift(String s, int[][] shift) {
            int left = 0;
            int right = 0;
            String res = "";
            for(int[] path: shift){
                if(path[0] == 0) left += path[1];
                else right += path[1];
            }
            left = left % s.length();
            right = right % s.length();
            if(left == right)return s;
            int direction = left > right? 0:1;
            if(direction==1){
                res = s.substring(s.length()-(right-left))+s.substring(0,s.length()-(right-left));
            }
            else{
                res = s.substring(left-right)+s.substring(0,left-right);
            }
            return res;
        }
    }
    class Solution {
        public String stringShift(String s, int[][] shift) {
            int left = 0;
            String res = "";
            for(int[] path: shift){
                if(path[0] == 0) left += path[1];
                else left -= path[1];
            }
            left = Math.floorMod(left, s.length()); //取模
            res = s.substring(left)+s.substring(0,left);
            return res;
        }
    }

    Python3

    class Solution:
        def stringShift(self, s: str, shift: List[List[int]]) -> str:
            left = 0
            right = 0
            res = ""
            for path in shift:
                if path[0] == 0:
                    left += path[1]
                else:
                    right += path[1]
            left = left % len(s) #bug刚开始没有求余数
            right = right % len(s)
            if left == right:
                return s
            direction = 0 if left > right else 1
            if direction:
                res = s[len(s)-(right-left):]+s[0:len(s)-(right-left)]
            else:
                res = s[(left-right):]+s[0:(left-right)]
            return res
    class Solution:
        def stringShift(self, s: str, shift: List[List[int]]) -> str:
            left = 0
            res = ""
            for path in shift:
                if path[0] == 0:
                    left += path[1]
                else:
                    left -= path[1]
            left = left % len(s) #bug刚开始没有求余数
            res = s[left:]+s[0:left]
            return res
  • 相关阅读:
    技术一定要动手做一遍才算自已的
    终于提离职了,感觉如释重负
    自我评定与学习计划
    MYSQL---INSERT...SELECT...
    MYSQL---LIMIT
    SQL---having
    MYSQL---数据定义
    CSS---Block和inline元素对比
    CSS---清除浮动
    T-SQL---分页语句
  • 原文地址:https://www.cnblogs.com/yawenw/p/12718977.html
Copyright © 2011-2022 走看看