Leetcode 246. Strobogrammatic Number

在这里插入图片描述
方法1: construct the rotated string,然后比较是否相等。这边利用到一个hashmap来存储每个数字和其反转之后对应的数字。时间复杂n,空间复杂n(因为stringbuilder需要O(n) space)。

class Solution {
    public boolean isStrobogrammatic(String num) {
        Map<Character,Character> map = new HashMap<>();
        map.put('0','0');
        map.put('1','1');
        map.put('6','9');
        map.put('8','8');
        map.put('9','6');
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < num.length(); i++){
            char c = num.charAt(i);
            if(!map.keySet().contains(c)) return false;
            char ch = map.get(c);
            sb.append(ch);
        }
        String rotate = sb.reverse().toString();
        return rotate.equals(num) ? true : false;
    }
}

方法2: two pointer。不需要stringbuilder,所以空间复杂度优化了,变为1。思路很简单,两个指针一个指向头,一个指向尾,从两端向中间推进。每次loop比较两个指针对应的数字,看是否满足题目条件。

class Solution {
    public boolean isStrobogrammatic(String num) {
        int left = 0;
        int right = num.length() - 1;
        while(left <= right){
            char head = num.charAt(left);
            char tail = num.charAt(right);
            if(head != tail){
                if(!(head == '6' && tail == '9') && !(head == '9' && tail == '6')) return false;
            }else{
                if(head != '0' && head != '1' && head != '8') return false;
            }
            left++;
            right--;
        }
        return true;
    }
}

总结:

  • 我发现了不管是什么类型的题目,只要涉及到string,几乎都要考虑two pointer放啊。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值