• 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
  • 相关阅读:
    jenkins学习:jenkins+maven
    git学习
    jenkins学习:jenkins+gitlab
    mongodb安装和运行
    ideaJ+maven+javaweb实践: sevlet实现upload&download,javaIO代码
    pageObject学习
    postman接口测试
    TODO 软件测试68题
    testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件
    testng报告-extentsReports使用-klov
  • 原文地址:https://www.cnblogs.com/yawenw/p/12718977.html
Copyright © 2020-2023  润新知