Leetcode -- Day 45

Reverse num/word/bits

最近回国了 有点懒

Question 1

Reverse Integer

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

Be careful about some interesting cases. i.e.negative number, overflow case.

 1     public int reverse(int x) {
 2         if (x >= -9 && x <= 9){
 3             return x;
 4         }
 5         
 6         boolean isNeg = false;
 7         if (x < 0){
 8             isNeg = true;
 9             x = 0 - x;
10         }
11         
12         double result = 0;
13         
14         while(x > 0){
15             result = result * 10 + x % 10;
16             x = x / 10;
17         }
18         
19         if (isNeg){
20             return -result < Integer.MIN_VALUE ? 0 : -(int)result;
21         }
22         else{
23             return result > Integer.MAX_VALUE ? 0 : (int)result;
24         }
25

Question 2

Reverse Words in a String

Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

I use split to change it an word array, or you can use toCharArray() to change it to char array. 

 1     public String reverseWords(String s) {
 2         StringBuffer result = "";
 3         String[] array = s.split(" ");
 4         for (int i = array.length - 1; i >= 0; i --){
 5             String temp = array[i].trim();
 6             if (temp.equals("") == false){
 7                 if (i != array.length - 1){
 8                     result += " " + temp;
 9                 }
10                 else{
11                     result += temp;
12                 }
13             }
14         }
15         return result.trim();
16     }

Question 3

Reverse Words in a String II
这里要求in-place,也就是说不需要开辟额外空间

Reverse all and then deal with space.

 1 public class Solution {
 2     public void reverseWords(char[] s) {
 3         reverse(s, 0, s.length);//reverse the whole char array
 4         //i is the start reverse point, j is the end reverse pont, i's change is
 5         //controlled by j, when j is the space, set i to the character taht next to space, i.e. i+1
 6         for (int i=0, j=0; j<=s.length; j++) {
 7             if (j==s.length || s[j]==' ') {
 8                 reverse(s, i, j);
 9                 i =  j + 1; //j is the space, specify i to j+1, i.e. the character next to space
10             }
11         }
12     }
13     //begin: indicate the start reversing location
14     //end-1:last character, end-1-i: i is the distance to end
15     private void reverse(char [] s, int begin, int end) {
16         //[!]i<(end-begin)/2
17         for (int i=0; i<(end-begin)/2; i++) {
18             char temp = s[begin+i];
19             s[begin+i] = s[end-i-1];
20             s[end-i-1] = temp;
21         }
22     }
23 }

Question 4

Reverse Bits

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as00111001011110000010100101000000).

n & 1 means always get the first digit of n. And put it to reverse's first digit (reversed << 1 menas move all digits to left by 1 bit). 

1     public int reverseBits(int n) {
2         int reversed = 0;
3         for (int i = 0; i < 32; i ++){
4            reversed = (reversed << 1) | (n & 1);
5             n = n >> 1; 
6         }
7         return reversed;
8     }
原文地址:https://www.cnblogs.com/timoBlog/p/4735861.html