算法题笔记(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huidev/article/details/87949527

由于整数最大为2147483647,即超过这个数就会溢出

假设int x 恰巧为最大值,那么

y = x/10 ;y= 214748364; 所以y * 10 +pop > =Integer.MAX_VALUE  ,所以pop>=7; 所以若 a = INTMAX/10 ,那么pop > 7 会溢出

还有如果a > y ,那么例如214748365 * 10 = 2147483650 > Integer.MAX_VALUE , 所以 a>INTMAX/10 会溢出

把123 ->321  -123 -> -321 

private static int reverse(int x){
        int rev = 0;
        while (x != 0){
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE/10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE/10 && pop < -8)) return 0;

            // 用这种方法就能把一个数给反过来,例如123
            rev = rev * 10 + pop;
        }
        return rev;
    }

负数不行。最后一位是0 也不行,但是0 行

后半部分的反转与前半部分相等就行。

public boolean isPalindrome(int x) {
        if(x < 0 || (x % 10 == 0 && x != 0)){
            return false;
        }
        int revNum = 0;
        while(x > revNum){
            revNum = revNum * 10 + x % 10;
            x /= 10;
        }
        return x == revNum || x == revNum/10;   // 偶数个数与奇数个数
    }

翻转一颗二叉树

示例:

               

扫描二维码关注公众号,回复: 5536204 查看本文章
public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    public TreeNode(int x) { val = x; }
}

 /**
     * 用递归的思想解决,因为根的左右子树交换,然后又将根的左子树作为根
     * 进行同样的操作即可,所以还用此函数解决,即使用递归,有子树同理。
     * @param root
     * @return
     */
    public TreeNode invertTree(TreeNode root){
        if (root == null) return null;
        // 交换根的左右子树
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
        // 将根的左子树作为根进行同样的交换操作即可,所以还使用此函数,即为递归
        if (root.left != null)
            invertTree(root.left);
        // 将根的右子树作为根进行它的左右子树交换操作
        if (root.right != null)
            invertTree(root.right);
        // 所有递归调用的函数出栈后,返回了树的根节点
        return root;
    }

 

 但是我们没有办法访问该节点的前一个节点,因为是单链表。

有一个办法就是将后面节点的值赋值为当前节点的值,这样两个节点的值一样。

然后再删除该节点的next 节点即可。 因为该题说明了要删除的节点不是末尾,所以可行。

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }

猜你喜欢

转载自blog.csdn.net/huidev/article/details/87949527
今日推荐